Jak mogę sprawdzić, czy moja baza danych zawiera jakieś indeksy?
Co powiesz na konkretny stół?
Jak mogę sprawdzić, czy moja baza danych zawiera jakieś indeksy?
Co powiesz na konkretny stół?
Odpowiedzi:
Aby zobaczyć indeks dla konkretnej tabeli użyj SHOW INDEX:
SHOW INDEX FROM yourtable;
Aby zobaczyć indeksy dla wszystkich tabel w ramach określonego schematu, możesz użyć tabeli STATISTICS z INFORMACJE_SCHEMA:
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';
Usunięcie klauzuli where spowoduje wyświetlenie wszystkich indeksów we wszystkich schematach.
DISTINCT
słowo kluczowe zamaskuje niektóre indeksy - Mam tabelę, w której indeks ma tę samą nazwę, ale jest używany w dwóch różnych kolumnach, więc przykładowy schemat informacyjny pokaże tylko jeden indeks.
from mydb
jak pokazano w odpowiedzi LiorK.
Jeśli chcesz zobaczyć wszystkie indeksy we wszystkich bazach danych jednocześnie:
use information_schema;
SELECT * FROM statistics;
SELECT * FROM information_schema.statistics;
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
Zobacz dokumentację .
Można użyć tego zapytania, aby uzyskać liczbę indeksów, a także nazwy indeksów każdej tabeli w określonej bazie danych.
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;
Proponuję to zapytanie:
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';
Znalazłeś wszystkie indeksy tylko indeksowe.
Uważać.
Aby uzyskać wszystkie indeksowane kolumny na indeks w jednej kolumnie w kolejności sekwencji.
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/
Możesz sprawdzić swoje indeksy w MySQL workbench. Na kartach raportów wydajności możesz zobaczyć wszystkie używane i nieużywane indeksy w systemie. lub możesz uruchomić zapytanie.
select * from sys.schema_index_statistics;