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是FROM关键字的同义词。因此,我们还可以使用以下同义词编写Show Indexes语句:
mysql> SHOW INDEXES IN table_name FROM database_name;
OR,
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。
Index_type: 它包含索引方法的名称,例如BTREE,HASH,RTREE,FULLTEXT等。
Comment: 当其列中未描述索引信息时,它包含索引信息。例如,当索引被禁用时,它返回禁用状态。
Index_column: 当您创建具有
comment 属性的索引时,它包含针对
Visible: 如果索引对查询优化器可见,则为YES,否则为NO。
Expression: MySQL 8.0支持
功能关键部分,这两个方面都会影响
表达式和
列名列。通过以下几点我们可以更清楚地了解它:
对于功能部件,expression列表示关键部件的表达式,column_name表示NULL。
对于非功能部分,表达式表示NULL,而column_name表示由关键部分索引的列。
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';
它将给出以下输出: