代码之家  ›  专栏  ›  技术社区  ›  JochenJung

在MySQL表中显示索引

  •  1
  • JochenJung  · 技术社区  · 15 年前

    如果我在两个字段上定义一个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)
    

    此表定义了以下索引:

    • 版本ID+职位ID
    • 测试1+测试2
    • 文本

    我知道这一点,因为我已经分配了它们,并在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+posted是连接的呢? 我可以看到索引中的Seq\在计数。所以我可以依靠versionid和postid形成一个共同的索引,仅仅因为它们在这个输出中并排排列并且Seq\u in\u index倒计时吗?

    3 回复  |  直到 15 年前
        1
  •  3
  •   MarkR    15 年前

    每个索引的键名称都是唯一的;属于同一索引的列在此表中将具有相同的名称。

    如果您查看包含索引的INFORMATION\u SCHEMA表(查看文档),可能更有意义。

    我假设您正在编写一个以编程方式检查数据库结构的工具。

    如果您是人并且想查看表结构,我建议改为显示CREATE table。

        2
  •  1
  •   Brian Hooper    15 年前

    “关键字名称”列显示要描述的索引。索引中的序列显示列在该索引中的顺序。所以在您的示例中,versionid和postid上有一个主键,userid上有一个非唯一键userid,test1和test2上有一个非唯一键测试,等等。

        3
  •  0
  •   Daniele    6 年前

    你不应该信任这个查询 SHOW INDEX FROM table ,有时会丢失一个或多个索引。 我更喜欢:

    SELECT DISTINCT
    INDEX_NAME  
    FROM INFORMATION_SCHEMA.STATISTICS
    WHERE TABLE_SCHEMA = 'DBNAME' and TABLE_NAME='TABLE';
    
    推荐文章