Comment puis-je voir si ma base de données contient des index?
Et pour une table spécifique?
Comment puis-je voir si ma base de données contient des index?
Et pour une table spécifique?
Réponses:
Pour voir l'index d'une table spécifique, utilisez SHOW INDEX:
SHOW INDEX FROM yourtable;
Pour voir les index de toutes les tables d'un schéma spécifique, vous pouvez utiliser la table STATISTICS de INFORMATION_SCHEMA:
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';
La suppression de la clause where affichera tous les index de tous les schémas.
DISTINCT
mot - clé masquera certains index - J'ai une table où un index porte le même nom mais est utilisé sur deux colonnes différentes, donc l'exemple de schéma d'information ici ne montrera qu'un seul index.
from mydb
comme indiqué dans la réponse de LiorK.
Si vous souhaitez voir tous les index de toutes les bases de données en une seule fois:
use information_schema;
SELECT * FROM statistics;
SELECT * FROM information_schema.statistics;
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
Voir documentation .
Vous pouvez utiliser cette requête pour obtenir le nombre d'index ainsi que les noms d'index de chaque table dans la base de données spécifiée.
SELECT TABLE_NAME,
COUNT(1) index_count,
GROUP_CONCAT(DISTINCT(index_name) SEPARATOR ',\n ') indexes
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'mydb'
AND INDEX_NAME != 'primary'
GROUP BY TABLE_NAME
ORDER BY COUNT(1) DESC;
Je propose cette requête:
SELECT DISTINCT s.*
FROM INFORMATION_SCHEMA.STATISTICS s
LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t
ON t.TABLE_SCHEMA = s.TABLE_SCHEMA
AND t.TABLE_NAME = s.TABLE_NAME
AND s.INDEX_NAME = t.CONSTRAINT_NAME
WHERE 0 = 0
AND t.CONSTRAINT_NAME IS NULL
AND s.TABLE_SCHEMA = 'YOUR_SCHEMA_SAMPLE';
Vous avez trouvé tous les index uniquement index.
Qui concerne.
Pour obtenir toutes les colonnes indexées par index dans une colonne dans l'ordre des séquences.
SELECT table_name AS `Table`,
index_name AS `Index`,
GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE table_schema = 'sakila'
GROUP BY 1,2;
Réf: http://blog.9minutesnooze.com/mysql-information-schema-indexes/
Vous pouvez vérifier vos index dans MySQL workbench. Sous les onglets des rapports de performances, vous pouvez voir tous les index utilisés et les index inutilisés sur le système. ou vous pouvez lancer la requête.
select * from sys.schema_index_statistics;