1、查看数据库所有索引
SELECT * FROM mysql.`innodb_index_stats` a WHERE a.`database_name` = '数据库名';
2、查看某一表索引
SELECT * FROM mysql.`innodb_index_stats` a WHERE a.`database_name` = '数据库名' and a.table_name like '%表名%';
mysql 查看索引:show index 详解
1)show index语法参数说明:
-- 参数说明
-- table_name :需要查询索引的表名;
-- db_name:(可选)数据库名。如果已使用某个数据库上下文,可以省略此参数;
-- (表名在库名之前例如:SHOW INDEX from table_name from db_name; 或者 SHOW INDEX from db_name.table_name;)
-- condition:(可选)可以添加where子句来筛选索引信息,比如根据索引名称、索引类型进行筛选;
SHOW INDEX FROM table_name [FROM db_name] [WHERE condition];
2)show index返回信息说明(见3中示例说明)
- table:表名;
- non_unique:是否允许重复值。如果值为1,表示允许重复值;如果值为0,表示不允许重复值(唯一索引、主键索引);
- key_name:索引名称。主键索引通常为:PRIMARY;
- seq_in_index:索引中列的序号。对于组合索引,这表示列在索引中的位置,其他类型索引一般为1;
- column_name:列名,索引涉及的列;
- collation:排序规则。A表示升序,NULL表示不可排序;
- cardinality:索引的基数。这是一个估算值,表示索引中唯一的数量。这个值对于查询优化器选择索引非常重要;
- sub_part:索引的前缀长度。对于部分索引,这表示索引的前缀长度;
- packed:索引是否被压缩。如果索引未被压缩,该列的值为NULL;
- null:列是否允许包含NULL的值;
- index_type:索引类型。常见的类型有btree、hash、fulltext等
- comment:索引的备注;
3)示例
建表语句,包含各种索引类型:主键索引、唯一索引、普通索引、前缀索引和联合索引
CREATE TABLE examples (
id INT AUTO_INCREMENT,
name VARCHAR(255),
description TEXT,
category VARCHAR(255),
price DECIMAL(10, 2),
PRIMARY KEY (id), -- 主键索引
UNIQUE KEY idx_name (name), -- 唯一索引
KEY idx_category (category), -- 普通索引
KEY idx_category_price (category, price), -- 联合索引
KEY idx_name_prefix (name(10)) -- 前缀索引
) ENGINE=InnoDB;
这个示例创建了一个名为:examples的表,包含一下索引:
- 主键索引(PRIMARY KEY):id列为主键索引。主键索引要求唯一,且不允许为NULL;
- 唯一索引(UNIQUE KEY):name列是唯一索引。唯一索引要求唯一,但允许为NULL;
- 普通索引(KEY):category列是普通索引。普通索引允许重复值和NULL;
- 联合索引(KEY):category列和price列组成一个联合索引。这允许根据两个列组合进行更快的查询;
- 前缀索引(KEY):name列的前10个字符被用作前缀索引。前缀索引允许在索引较长的字符串列时节省存储空间和提高查询速度,但可能会影响查询准确性;
使用show index 查询索引信息:
show index from examples;
输出结果如下: