Как увидеть индексы для базы данных или таблицы в 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= 'ваш индекс'

Другие вопросы по тегам