Как увидеть индексы для базы данных или таблицы в MySQL?
Как узнать, есть ли в моей базе данных какие-либо индексы?
Как насчет конкретной таблицы?
15 ответов
Чтобы увидеть индекс для конкретной таблицы, используйте SHOW INDEX:
SHOW INDEX FROM yourtable;
Чтобы увидеть индексы для всех таблиц в конкретной схеме, вы можете использовать таблицу STATISTICS из INFORMATION_SCHEMA:
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';
Удаление предложения where покажет вам все индексы во всех схемах.
Если вы хотите увидеть все индексы во всех базах данных одновременно:
use information_schema;
SELECT * FROM statistics;
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
Смотрите документацию.
Вы можете использовать этот запрос, чтобы получить число индексов, а также имена индексов каждой таблицы в указанной базе данных.
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;
чтобы увидеть созданные вами индексы, используйте
SHOW INDEX from your_table_name;
чтобы увидеть все индексы в таблице (созданные вами и БД)
SHOW EXTENDED INDEX from your_table_name;
Получить все индексированные столбцы для каждого индекса в одном столбце в порядке следования.
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;
Ссылка: http://blog.9minutesnooze.com/mysql-information-schema-indexes/
Почему нет
show create table myTable
?
Кто-то сказал мне это, но я не видел, чтобы здесь кто-то упоминал, что-нибудь плохое?
Это удобно, если вы просто хотите взглянуть на индексы вместе с информацией о столбцах.
Это работает в моем случае для получения имени таблицы и имени столбца в соответствующей таблице для индексированных полей.
SELECT TABLE_NAME , COLUMN_NAME, COMMENT
FROM information_schema.statistics
WHERE table_schema = 'database_name';
Я предлагаю этот запрос:
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';
Вы нашли весь индекс только индекс.
Regard.
Чтобы проверить все отключенные индексы на БД
SELECT INDEX_SCHEMA, COLUMN_NAME, COMMENT
FROM information_schema.statistics
WHERE table_schema = 'mydb'
AND COMMENT = 'disabled'
Вы можете проверить свои индексы в MySQL workbench. На вкладках отчетов о производительности вы можете увидеть все используемые и неиспользуемые индексы в системе. или вы можете запустить запрос.
select * from sys.schema_index_statistics;
Чтобы запросить информацию об индексе таблицы, вы используете оператор SHOW INDEXES следующим образом:
SHOW INDEXES FROM table_name;
Вы можете указать имя базы данных, если вы не подключены к какой-либо базе данных или хотите получить информацию об индексе таблицы в другой базе данных:
SHOW INDEXES FROM table_name
IN database_name;
Следующий запрос аналогичен приведенному выше:
SHOW INDEXES FROM database_name.table_name;
Обратите внимание, что INDEX и KEYS являются синонимами INDEXES, IN - синонимом FROM, поэтому вместо них вы можете использовать эти синонимы в столбце SHOW INDEXES. Например:
SHOW INDEX IN table_name
FROM database_name;
Или же
SHOW KEYS FROM tablename
IN databasename;
SELECT * FROM information_schema.statistics WHERE TABLE_SCHEMA="database-name"
select
table_name,
index_name,
seq_in_index,
column_name,
non_unique,
index_type,
comment
from
information_schema.statistics
where 1=1
and table_schema = 'my_schema'
and table_name = 'my_table'
order by 1,2,3,4,5,6
мы можем напрямую видеть индексы в таблице, если мы знаем имя индекса, как показано ниже:
выберите * из all_indexes, где index_name= 'ваш индекс'