MySQL 显示索引
我们可以使用Show Indexes语句获取表的索引信息。此语句可以编写如下:
mysql> SHOW INDEXES FROM table_name;
在上面的语法中,我们可以看到如果我们想要获取表的索引,就需要在FROM关键字之后指定 table_name 。在语句成功执行后,它将返回当前数据库中表的索引信息。
如果我们想要获取不同数据库或者连接的数据库中表的索引信息,MySQL允许我们使用Show Indexes语句指定数据库名称。下面的语句更清楚地解释了这一点:
mysql> SHOW INDEXES FROM table_name IN database_name;
上述语句也可以写成:
mysql> SHOW INDEXES FROM database_name.table_name;
注意:需要注意的是索引和键都是索引的同义词,IN 是 FROM 关键字的同义词。因此,我们也可以使用这些同义词来编写 Show Indexes 语句,如下所示:
mysql> SHOW INDEXES IN table_name FROM database_name;
或者,
mysql> SHOW KEYS FROM table_name IN database_name;
查询SHOW INDEX返回以下字段/信息:
表: 包含表的名称。
非唯一: 如果索引包含重复项,则返回1。否则,返回0。
键名: 是索引的名称。如果表包含主键,则索引名称始终为PRIMARY。
Seq_in_index: 是索引中列的序列号,从1开始。
列名: 包含列的名称。
排序规则: 提供关于列在索引中如何排序的信息。它包含的值为 A 表示升序, D 表示降序,而 Null 表示未排序的。
基数: 给出索引表中唯一值的估计数量,其中较高的基数表示MySQL使用索引的机会较大。
子部分: 是索引的前缀。如果表的所有列都被索引,则其值为NULL。当列部分被索引时,它将返回索引的字符数。
打包: 告诉如何打包索引。否则,返回NULL。
NULL: 如果列没有NULL值,则包含 空 ;否则,返回YES。
索引类型: 包含索引方法的名称,如BTREE,HASH,RTREE,FULLTEXT等。
注释: 包含索引信息,当它们未在列中描述时。例如,当索引被禁用时,返回disabled。
索引列: 当使用 comment 属性创建索引时,它包含指定索引的注释。
可见: 如果索引对查询优化器可见,则包含YES;否则,包含NO。
表达式: MySQL 8.0支持影响 表达式 和 列名 列的 函数键部分 。我们可以通过以下要点更清楚地了解:
- 对于函数部分,表达式列表示关键部分的表达式,列名表示NULL。
- 对于非函数部分,表达式表示NULL,列名表示由关键部分索引的列。
MySQL SHOW INDEX示例
在这里,我们将创建一个名为 student_info 的表,其中包含学生id、姓名、年龄、手机号和电子邮件详情。执行以下命令创建表:
CREATE TABLE `student_info` (
`studentid` int NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`age` varchar(3) DEFAULT NULL,
`mobile` varchar(20) DEFAULT NULL,
`email` varchar(25) DEFAULT NULL,
PRIMARY KEY (`studentid`),
UNIQUE KEY `email_UNIQUE` (`email`)
)
接下来,我们通过以下命令在这个表上创建一个索引:
mysql> CREATE INDEX mobile ON student_info (mobile) INVISIBLE;
mysql> CREATE INDEX name ON student_info (name) COMMENT 'Student Name';
现在,执行以下命令,返回student_info表中的所有索引信息:
mysql> SHOW INDEXES FROM student_info;
我们将获得以下输出:
过滤索引信息
我们可以使用 where子句来过滤索引信息。以下语句可用于过滤索引信息:
Mysql> SHOW INDEXES FROM table_name where condition;
示例
如果您只想获取student_info表的 不可见 索引,请执行以下命令:
mysql> SHOW INDEXES FROM student_info WHERE visible = 'NO';
它将提供以下输出: