MySQL检察索引语句:SHOW INDEX 详细讲解

打印 上一主题 下一主题

主题 855|帖子 855|积分 2565

概述:

SHOW INDEX语句是MySQL中用于检察表索引信息的语句。它提供了有关表中索引的详细信息,包括索引名称、索引类型、关联的列等。以下是SHOW INDEX的详细阐明:
语法:

  1. SHOW INDEX FROM table_name [FROM db_name] [WHERE condition];
复制代码
参数阐明:



  • table_name:

    • 必要查询索引的表名。

  • db_name:

    • (可选)数据库名。假如你已经在某个数据库上下文中,可以省略此参数。

  • condition:

    • (可选)可以添加WHERE子句来筛选索引信息,好比根据索引名称、索引类型等进行筛选。

SHOW INDEX语句返回以下信息:



  • table:

    • 表名。

  • non_unique:

    • 是否答应重复值。假如值为1,表示答应重复值;假如值为0,表示不答应重复值(唯一索引)。

  • key_name:

    • 索引名称。主键索引名通常为PRIMARY。

  • seq_in_index:

    • 索引中的列的序号。对于组合索引,这表示列在索引中的位置。

  • column_name:

    • 列名,索引涉及的列。

  • collation:

    • 排序规则。A表示升序,NULL表示不可排序。

  • cardinality:

    • 索引的基数。这是一个估算值,表示索引中唯一值的数量。这个值对于查询优化器选择索引非常紧张。

  • sub_part:

    • 索引的前缀长度。对于部门索引,这表示索引的前缀长度。

  • packed:

    • 索引是否被压缩。假如索引未被压缩,该列的值为NULL。

  • null:

    • 列是否答应包含NULL值。

  • index_type:

    • 索引类型。常见的类型有BTREE、HASH、FULLTEXT等。

  • comment:

    • 索引的备注。

示例:

下面是一个名为examples的表,其中包含各种类型的索引:主键索引、唯一索引、平凡索引、前缀索引和联合索引。
  1. CREATE TABLE examples (
  2.   id INT AUTO_INCREMENT,
  3.   name VARCHAR(255),
  4.   description TEXT,
  5.   category VARCHAR(255),
  6.   price DECIMAL(10, 2),
  7.   PRIMARY KEY (id),
  8.   UNIQUE KEY idx_name (name),
  9.   KEY idx_category (category),
  10.   KEY idx_category_price (category, price),
  11.   KEY idx_name_prefix (name(10))
  12. ) ENGINE=InnoDB;
复制代码
在这个示例中,我们创建了一个名为examples的表,包含以下类型的索引:


  • 主键索引(PRIMARY KEY):

    • id列是主键索引。主键索引要求唯一且不答应NULL值。

  • 唯一索引(UNIQUE KEY):

    • name列是唯一索引。唯一索引要求唯一,但答应NULL值。

  • 平凡索引(KEY):

    • category列是平凡索引。平凡索引答应重复值和NULL值。

  • 联合索引(KEY):

    • category和price列组成了一个联合索引。这答应根据这两个列的组合进行更快的查询。

  • 前缀索引(KEY):

    • name列的前10个字符被用作前缀索引。前缀索引答应在索引较长的字符串列时节流存储空间和提高查询速率,但大概会影响查询正确性。

如今,使用SHOW INDEX语句查询examples表的索引信息:
  1. SHOW INDEX FROM examples;
复制代码
输出结果(以表格形式表示):

在SHOW INDEX的输出中,你可以看到examples表的各种类型索引:


  • 主键索引(PRIMARY KEY):

    • 在key_name列中,PRIMARY关键字表示该行对应的是主键索引。non_unique列的值为0,阐明主键索引的值必须是唯一的。在此例中,主键索引是id列。

  • 唯一索引(UNIQUE KEY):

    • 在key_name列中,自定义的索引名称(例如idx_name)表示这是一个唯一索引。non_unique列的值为0,阐明唯一索引的值必须是唯一的,但答应NULL值。在此例中,唯一索引是name列。

  • 平凡索引(KEY):

    • 在key_name列中,自定义的索引名称(例如idx_category)表示这是一个平凡索引。non_unique列的值为1,阐明平凡索引答应重复值和NULL值。在此例中,平凡索引是category列。

  • 前缀索引(KEY):

    • 前缀索引的辨认方法与平凡索引相同,但在sub_part列中有一个值,表示使用列值的前多少个字符作为前缀索引。在此例中,idx_name_prefix是一个前缀索引,它将name列的前10个字符作为索引。

  • 联合索引(KEY):

    • 联合索引可以通过key_name列中的相同索引名称以及不同的seq_in_index值来辨认。在seq_in_index列中,数字表示列在联合索引中的次序。在此例中,idx_category_price是一个联合索引,包括category和price两个列。

    • 在这两行中,key_name列的值都是idx_category_price,表明它们属于同一个索引。seq_in_index列的值分别为1和2,表示category和price这两个列在联合索引中的次序。 

留意,SHOW INDEX语句及返回的结果列大概会因MySQL版本的不同而有所差异。本解释基于MySQL 8.0版本。在其他版本中,返回的结果列大概有所不同。要获取与您的MySQL版本对应的详细信息,请查阅官方文档。
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表