Comment voir les index d'une base de données ou d'une table dans MySQL?

Comment puis-je voir si ma base de données contient des index?

Que diriez-vous d'une table spécifique?

344
demandé sur Ramratan Gupta 2011-03-06 23:55:52

8 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 de statistiques de INFORMATION_SCHEMA:

SELECT DISTINCT
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';

La suppression de la clause where vous montrera tous les index de tous les schémas.

552
répondu Mark Byers 2011-03-06 21:11:19

Si vous voulez voir tous les index dans toutes les bases de données à la fois:

use information_schema;
SELECT * FROM statistics;
34
répondu RolandoMySQLDBA 2013-05-17 08:48:04
SHOW INDEX FROM mytable FROM mydb;

SHOW INDEX FROM mydb.mytable;

Voir documentation.

30
répondu LiorK 2013-05-17 08:47:50

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;
5
répondu adeviloper 2017-08-21 07:38:58

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 seulement index.

Égard.

3
répondu user2065095 2017-08-21 06:46:31

Pour vérifier tous les index désactivés sur db

SELECT INDEX_SCHEMA, COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'mydb'
AND COMMENT = 'disabled'
1
répondu Digital87 2018-03-28 06:25:00

Cela fonctionne dans mon cas pour obtenir le nom de la table et le nom de la colonne dans la table correspondante pour les champs indexés.

SELECT TABLE_NAME , COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'database_name';
1
répondu asim 2018-08-28 12:06:14

Vous pouvez vérifier vos index dans MySQL workbench.sous les onglets rapports de performance, vous pouvez voir tous les index utilisés et les index inutilisés sur le système. ou vous pouvez déclencher la requête.

select * from sys.schema_index_statistics;
0
répondu Ganesh Giri 2018-08-28 12:06:06