Wie sehe ich, ob meine Datenbank Indizes enthält?
Wie wäre es mit einem bestimmten Tisch?
Wie sehe ich, ob meine Datenbank Indizes enthält?
Wie wäre es mit einem bestimmten Tisch?
Antworten:
Verwenden Sie SHOW INDEX, um den Index für eine bestimmte Tabelle anzuzeigen:
SHOW INDEX FROM yourtable;
Um Indizes für alle Tabellen innerhalb eines bestimmten Schemas anzuzeigen, können Sie die STATISTICS-Tabelle von INFORMATION_SCHEMA verwenden:
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';
Wenn Sie die where-Klausel entfernen, werden alle Indizes in allen Schemas angezeigt.
DISTINCT
Schlüsselwort einige Indizes maskiert. Ich habe eine Tabelle, in der ein Index denselben Namen hat, aber für zwei verschiedene Spalten verwendet wird. Daher zeigt das Beispiel für das Informationsschema hier nur einen Index.
from mydb
wie in LiorKs Antwort gezeigt.
Wenn Sie alle Indizes in allen Datenbanken gleichzeitig anzeigen möchten:
use information_schema;
SELECT * FROM statistics;
SELECT * FROM information_schema.statistics;
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
Siehe Dokumentation .
Mit dieser Abfrage können Sie die Anzahl der Indizes sowie die Indexnamen jeder Tabelle in der angegebenen Datenbank abrufen.
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;
Ich schlage diese Abfrage vor:
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';
Sie haben alle Index nur Index gefunden.
Betrachten.
Um alle indizierten Spalten pro Index in einer Spalte in der Reihenfolge der Reihenfolge abzurufen.
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;
Ref: http://blog.9minutesnooze.com/mysql-information-schema-indexes/
Sie können Ihre Indizes in MySQL Workbench überprüfen. Auf den Registerkarten für Leistungsberichte können Sie alle verwendeten und nicht verwendeten Indizes auf dem System anzeigen. oder Sie können die Abfrage auslösen.
select * from sys.schema_index_statistics;