Индекс базы данных MySQL относится к типу структуры данных, используемой в качестве организации данных в базе данных и помогающей повысить скорость различных операций, выполняемых в MySQL.
Индексы очень полезны. Без них MySQL должен сканировать всю таблицу, чтобы найти соответствующие строки и столбцы, что может быть очень неэффективным в больших базах данных.
В этом руководстве основное внимание будет уделено тому, как просматривать информацию индекса с помощью предложения SHOW INDEXES в MySQL.
Показать индексы таблиц
Чтобы показать информацию об индексе в таблице, мы используем предложение SHOW INDEXES, за которым следует имя таблицы, для которой мы хотим получить информацию об индексе.
Общий синтаксис показан как:
SHOW INDEXES tbl_name;
Например, рассмотрим одну из таблиц в образце базы данных Sakila. Мы можем получить информацию об индексе, как показано в запросе ниже:
USE sakila;
SHOW INDEXES FROM film;
Вышеупомянутый запрос отобразит индексную информацию из таблицы фильмов в базе данных Sakila. Результат:
Понимание информации об индексе
Команда SHOW INDEXES отображает соответствующую информацию об индексах в указанной таблице.
Здесь представлены следующие условия и соответствующая информация:
- Таблица: это первый столбец вывода. Он показывает имя таблицы, в которой находится индекс.
- Неуникальный: второй столбец показывает, может ли индекс содержать дубликат. Это логическое значение, где 1 указывает, что индекс может содержать дубликаты, и 0 в противном случае.
- Key_name: втретьем столбце отображается имя индекса. По соглашению первичный ключ принимает имя индекса PRIMARY.
- Seq_in_index: вчетвертом столбце отображается порядковый номер столбца в индексе, начиная со значения 1.
- Column_name:пятый столбец — это просто имя столбца.
- Сопоставление: шестой столбец — это раздел, в котором показано, как столбец сортируется в индексе. Имеется три значения сортировки: A — порядок по возрастанию, B — по убыванию, а NULL — как несортированный.
- Количество элементов :седьмой столбец показывает уникальность значения данных. В индексах он показывает предполагаемое количество уникальных значений в конкретном индексе.
- Под_часть: восьмой столбец отображает префикс индекса с NULL, что указывает на то, что индексируется весь столбец.
- Упаковано: девятый столбец показывает, как упакованы ключи индекса, при этом NULL указывает, что ключи не упакованы.
- Null: десятый столбец указывает, может ли столбец содержать значения NULL. Да, если столбец может содержать нулевые значения, и пустой, если нет.
- Index_type: одиннадцатый столбец показывает метод индекса, такой как BTREE, HASH, RTREE и FULLTEXT.
- Комментарий: двенадцатый столбец показывает информацию об индексе, не описанном в его столбце.
- Index_comment: тринадцатый столбец показывает дополнительную информацию об индексе, заданном с помощью атрибута COMMENT при создании.
- Видимый: четырнадцатый столбец — это индекс, видимый оптимизатору запросов, со значениями Да и Нет.
- Выражение: пятнадцатый столбец отображается, если в индексе используется выражение, а не значение столбца или префикса столбца.
СОВЕТ: информация об индексах из запроса SHOW INDEXES аналогична информации из SQLStatistics.
Показать индексы схемы
Вы также можете получить индексную информацию о схеме. Общий синтаксис для достижения этого результата следующий:
SELECT table_name, index_name FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = “schema_name”;
Рассмотрим запрос ниже, который показывает информацию о схеме Sakila:
SELECT table_name, index_name FROM information_schema.statistics WHERE table_schema = «sakila»;
Это отобразит информацию об индексах в схеме Sakila, как показано в выходных данных ниже:
+—————+——————————+
| TABLE_NAME | INDEX_NAME |
+—————+——————————+
| actor | PRIMARY |
| actor | idx_actor_last_name |
| address | PRIMARY |
| address | idx_fk_city_id |
| address | idx_location |
| category | PRIMARY |
| city | PRIMARY |
| city | idx_fk_country_id |
| country | PRIMARY |
| customer | PRIMARY |
| customer | idx_fk_store_id |
| customer | idx_fk_address_id |
| customer | idx_last_name |
| film | PRIMARY |
| film | idx_title |
| film | idx_fk_language_id |
| film | idx_fk_original_language_id |
| film_actor | PRIMARY |
| film_actor | PRIMARY |
| film_actor | idx_fk_film_id |
| film_category | PRIMARY |
| film_category | PRIMARY |
| film_category | fk_film_category_category |
| film_text | PRIMARY |
| film_text | idx_title_description |
| film_text | idx_title_description |
| inventory | PRIMARY |
| inventory | idx_fk_film_id |
| inventory | idx_store_id_film_id |
| inventory | idx_store_id_film_id |
|——————————OUTPUT TRUNCATED—————————
Вы также можете получить информацию из всех схем на сервере, используя запрос, показанный ниже:
SELECT table_name, index_name FROM information_schema.statistics;
ПРИМЕЧАНИЕ. Приведенный выше запрос выводит много информации. В редких случаях вам понадобится получать индексы по всем схемам. Однако ниже приведен пример вывода:
+———————+————+
| TABLE_NAME | INDEX_NAME |
+———————+————+
| innodb_table_stats | PRIMARY |
| innodb_table_stats | PRIMARY |
| innodb_index_stats | PRIMARY |
| innodb_index_stats | PRIMARY |
| innodb_index_stats | PRIMARY |
+———————+————+
Заключение
В этом руководстве мы обсудили, как использовать запрос MySQL SHOW INDEXES для получения информации об индексах в таблице. Мы также рассмотрели использование information_schema для получения информации об индексах из одной или всех схем на сервере MySQL.