Je traite une base de données d'environ 300 tables et je cherche un moyen de trouver toutes les tables qui n'ont aucun index (à l'exclusion du primaire). Idéalement, je voudrais récupérer un ensemble de résultats qui me donne un compte du nombre d'index par table. J'ai essayé cela en utilisant une requête comme celle-ci: strong> mais il ne renvoie pas de résultats précis. Toute aide serait appréciée p> p>
5 Réponses :
Ceci retournera le nombre d'index pour toutes les tables
Malheureusement, cela ne révèle pas quelles tables n'ont pas d'index ..Only ceux avec des index
Un outil utile pour des situations telles que ceci permet également d'activer le journal de requête lente MySQL. Vous devez l'activer sur my.cnf, mais que seules les requêtes prenant plus de temps que définie la durée sont enregistrées, vous pouvez le laisser allumé même sur les systèmes de production. P>
Avec cela en place, les requêtes prenant longtemps à répondre sont enregistrées et que vous pouvez voir ce qui les a ralentis. P>
Utilisez déjà cela, mais cela ne pointe que des requêtes après le fait. Je cherche vraiment à attraper une partie de ces choses maintenant avant que ce soit un problème.
Cela résultera des tables qui n'ont aucun index du tout (pas même la clé principale)
@James, je sais quel sera votre prochain problème dans ce fil: "hors primaire"
select t.table_schema,t.table_name,engine from information_schema.tables t inner join information_schema .columns c on t.table_schema=c.table_schema and t.table_name=c.table_name group by t.table_schema,t.table_name having sum(if(column_key in ('PRI','UNI'), 1,0)) = 0; This select works but it returns if table is not PRIMARY or Unique
BPGERGO , est sur quelque chose ici.
Et je crois que c'est ce que vous recherchez p> Vous n'aurez besoin que de changer
votre_database code> pour obtenir ceci pour fonctionner. P>
blockQuote> p>
Êtes-vous sûr que les résultats ne sont pas exacts? J'ai couru cette question sur ma base de données et cela semble être précis pour moi.