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;  

注意:需要注意的是Index和Keys都是Indexes的同义词,IN是FRO​​M关键字的同义词。因此,我们也可以使用这些同义词编写 Show Indexes 语句,如下所示:

mysql> SHOW INDEXES IN table_name FROM database_name;  

或者

mysql> SHOW KEYS FROM table_name IN database_name;  

参数说明

SHOW INDEX 查询返回以下字段/信息:

Table:它包含表的名称。

Non_unique:如果索引包含重复项,则返回 1。否则,它返回 0。

Key_name:它是索引的名称。如果表包含主键,则索引名称始终为 PRIMARY。

Seq_in_index:是索引中从1开始的列的序号。

Column_name:它包含列的名称。

Collation:它提供有关列在索引中如何排序的信息。它包含值,其中A表示升序,D表示降序,Null表示未排序。

Cardinality:它给出了索引表中唯一值的估计数量,其中较高的基数表示 MySQL 使用索引的机会更大。

Sub_part:是索引的前缀。如果表的所有列都被索引,则它具有 NULL 值。当列被部分索引时,它将返回索引字符的数量。

Packed:它告诉密钥是如何打包的。否则,它返回 NULL。

NULL:如果该列没有NULL值,则为空;否则,它返回 YES。

Index_type:它包含索引方法的名称,如 BTREE、HASH、RTREE、FULLTEXT 等。

Comment:它包含未在其列中描述的索引信息。例如,当索引被禁用时,它返回 disabled。

Index_column:创建带有注释属性的索引时,它包含指定索引的注释。

Visible:如果索引对查询优化器可见,则为 YES,否则为 NO。

Expression: MySQL 8.0 支持影响表达式和column_name列的功能键部分。我们可以通过以下几点更清楚地理解它:

  • 对于功能部分,表达式列表示关键部分的表达式,column_name 表示 NULL。
  • 对于非功能部分,表达式表示NULL,column_name表示键部分索引的列。

一、MySQL SHOW INDEX 的示例

在这里,我们将创建一个表student_info,其中包含学生 id、name、age、mobile和email详细信息。执行以下命令创建表:

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';  

它将给出以下输出:

热门文章

优秀文章