Bagaimana saya melihat apakah database saya memiliki indeks?
Bagaimana dengan tabel tertentu?
Bagaimana saya melihat apakah database saya memiliki indeks?
Bagaimana dengan tabel tertentu?
Jawaban:
Untuk melihat indeks untuk tabel tertentu, gunakan SHOW INDEX:
SHOW INDEX FROM yourtable;
Untuk melihat indeks untuk semua tabel dalam skema tertentu, Anda dapat menggunakan tabel STATISTICS dari INFORMATION_SCHEMA:
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';
Menghapus klausa di mana akan menampilkan semua indeks di semua skema.
DISTINCT
kata kunci akan menutupi beberapa indeks - Saya memiliki tabel di mana indeks memiliki nama yang sama tetapi digunakan pada dua kolom yang berbeda, jadi contoh skema informasi di sini hanya akan menampilkan satu indeks.
from mydb
seperti yang ditunjukkan dalam jawaban LiorK.
Jika Anda ingin melihat semua indeks di semua database sekaligus:
use information_schema;
SELECT * FROM statistics;
SELECT * FROM information_schema.statistics;
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
Lihat dokumentasi .
Anda bisa menggunakan kueri ini untuk mendapatkan no of indexes serta nama-nama indeks dari setiap tabel dalam database yang ditentukan.
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;
Saya mengusulkan pertanyaan ini:
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';
Anda menemukan semua Indeks hanya indeks.
Menganggap.
Untuk mendapatkan semua kolom yang diindeks per indeks dalam satu kolom dalam urutan urutan.
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/
Anda dapat memeriksa indeks di MySQL workbench. Di bawah tab laporan kinerja, Anda dapat melihat semua indeks yang digunakan dan indeks yang tidak digunakan pada sistem. atau Anda dapat memecat kueri.
select * from sys.schema_index_statistics;