Показать индексы в таблице MySQL - PullRequest
1 голос
/ 08 июля 2010

Если я определяю индекс MySQL по двум полям, как мне узнать, какие два принадлежат друг другу (используя команды MySQL).

Вот пример таблицы:

mysql> DESCRIBE lansuite_wiki_versions;
+-----------+-----------------------+------+-----+-------------------+-----------------------------+
| Field     | Type                  | Null | Key | Default           | Extra                       |
+-----------+-----------------------+------+-----+-------------------+-----------------------------+
| versionid | int(11)               | NO   | PRI | 0                 |                             |
| postid    | int(11)               | NO   | PRI | 0                 |                             |
| date      | timestamp             | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| userid    | mediumint(8) unsigned | NO   | MUL | 0                 |                             |
| text      | text                  | NO   | MUL | NULL              |                             |
| test1     | int(11)               | NO   | MUL | NULL              |                             |
| test2     | int(11)               | NO   |     | NULL              |                             |
+-----------+-----------------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.00 sec)

В этой таблице определены индексы:

  • versionid + postid
  • ИД пользователя
  • test1 + test2
  • text

Я знаю это, потому что я назначил их и вижу их в phpmyadmin.Но я хочу видеть это и в моем приложении.Итак, я нашел эту команду mySQL:

mysql> SHOW INDEX FROM lansuite_wiki_versions;
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| lansuite_wiki_versions |          0 | PRIMARY  |            1 | versionid   | A         |        NULL |     NULL | NULL   |      | BTREE      |         |
| lansuite_wiki_versions |          0 | PRIMARY  |            2 | postid      | A         |         144 |     NULL | NULL   |      | BTREE      |         |
| lansuite_wiki_versions |          1 | userid   |            1 | userid      | A         |           4 |     NULL | NULL   |      | BTREE      |         |
| lansuite_wiki_versions |          1 | test     |            1 | test1       | A         |           1 |     NULL | NULL   |      | BTREE      |         |
| lansuite_wiki_versions |          1 | test     |            2 | test2       | A         |           1 |     NULL | NULL   |      | BTREE      |         |
| lansuite_wiki_versions |          1 | text     |            1 | text        | NULL      |           1 |     NULL | NULL   |      | FULLTEXT   |         |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
6 rows in set (0.00 sec)

Но как мне увидеть, что versionid + postid подключен?Я вижу, как Seq_in_index подсчитывает.Итак, могу ли я рассчитывать на то, что versionid и postid образуют общий индекс только потому, что они стоят в строках рядом друг с другом в этих выходных данных и подсчитывают Seq_in_index?Или есть другая команда, которая показывает мне, какие индексы определены?

Ответы [ 3 ]

3 голосов
/ 08 июля 2010

Key_name будет уникальным для каждого индекса;столбцы, которые являются частью одного и того же индекса, будут иметь одинаковое имя в этой таблице.

seq_in_index дает вам последовательность.

Это может иметь больше смысла, если вы посмотрите на таблицу INFORMATION_SCHEMA, содержащую индексы (посмотрите документацию).

Я предполагаю, что вы пишете инструмент для программного анализа структуры базы данных.

Если вы человек и хотите увидеть структуру таблицы, я рекомендую вместо этого SHOW CREATE TABLE.

1 голос
/ 08 июля 2010

Столбец имени ключа показывает, какой индекс описывается.Последовательность в индексе показывает, в каком порядке находятся столбцы в этом индексе.Итак, в вашем примере у вас есть PRIMARY KEY для versionid и postid, неуникальный ключ userid для userid, неуникальный ключ test для test1 и test2 и т. Д.

0 голосов
/ 31 августа 2018

Не стоит доверять запросу SHOW INDEX FROM table, иногда он пропускает один или несколько индексов. Я предпочитаю:

SELECT DISTINCT
INDEX_NAME  
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'DBNAME' and TABLE_NAME='TABLE';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...