查看MySQL冗余索引和未使用的索引

沉舟侧畔千帆进,病树前头万木春。这篇文章主要讲述查看MySQL冗余索引和未使用的索引相关的知识,希望能为你提供帮助。
演示环境mysql5.7.22
【查看MySQL冗余索引和未使用的索引】

查看MySQL冗余索引:
下面的视图sys.schema_redundant_indexes 可以看到mysql表中的冗余索引

\'tidb03\' root@localhost 19:31:46 (none)> select * from sys.schema_redundant_indexes limit 1\\G

*************************** 1. row ***************************

table_schema: db_bbs#包含重复\\冗余索引的表对应的schema的名称

table_name: t_userbaseinfo#包含重复\\冗余索引的表名称

redundant_index_name: f_id#包含重复\\冗余索引的索引名称

redundant_index_columns: f_id#包含重复\\冗余索引的索引列名称

redundant_index_non_unique: 0#重复\\冗余索引中非唯一列的数量

dominant_index_name: PRIMARY#与重复\\冗余索引相比占据优势(最佳)索引的名称

dominant_index_columns: f_id#占据优势(最佳)索引的列名称

dominant_index_non_unique: 0#占据优势(最佳)索引中非唯一列的数量

subpart_exists: 0# 重复\\冗余索引是否是前缀索引

sql_drop_index: ALTER TABLE `db_bbs`.`t_userbaseinfo` DROP INDEX `f_id`

1 row in set (0.17 sec)# 针对重复/冗余索引生成的drop index语句



下面是此表的表结构sql:


\'tidb03\' root@localhost 19:32:36 (none)> show create table `db_bbs`.`t_userbaseinfo`\\G

*************************** 1. row ***************************

Table: t_userbaseinfo

Create Table: CREATE TABLE `t_userbaseinfo` (

`f_id` int(4) NOT NULL AUTO_INCREMENT COMMENT \'用户ID\',

`f_nickname` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT \'\' COMMENT \'昵称 (默认为用户帐号)\',

`f_realname` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT \'\' COMMENT \'真实姓名\',

`f_stage_name` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\' COMMENT \'花名\',

`f_password` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT \'帐号密码\',

`f_pay_password` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT \'\' COMMENT \'支付密码\',

`f_head_url` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT \'\' COMMENT \'头像地址\',

`f_country_code` int(5) DEFAULT \'86\',

`f_phone` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT \'手机\',

`f_reg_ip` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\' COMMENT \'用户注册IP地址\',

`f_signature` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT \'\' COMMENT \'个性签名\',

`f_qq_open_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT \'\',

`f_wechat_open_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT \'\',

`f_weibo_open_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT \'\',

`f_biyong_open_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

`f_area` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'110000\' COMMENT \'推荐人userid\',

`f_marker` int(1) unsigned zerofill NOT NULL DEFAULT \'0\' COMMENT \'0:正式用户,1:测试用户\',

`f_create_time` int(4) NOT NULL COMMENT \'注册时间\',

`F_modify_time` int(4) NOT NULL COMMENT \'更新时间\',

`f_status` int(1) NOT NULL DEFAULT \'1\' COMMENT \'数据状态\',

`f_block_state` tinyint(1) DEFAULT \'0\' COMMENT \'用户禁言状态\',

`f_rank` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

`f_position` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',

`f_dept` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',

`f_incarnation` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',

`f_push_token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\' COMMENT \'推送token\',

`f_os` tinyint(1) unsigned DEFAULT \'3\',

`f_email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

PRIMARY KEY (`f_id`) USING BTREE,

UNIQUE KEY `f_id` (`f_id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=4979 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC

1 row in set (0.00 sec)



查看未使用的索引:
sys.schema_unused_indexes 视图可以查看不活跃的索引(没有任何事件发生的索引,表示该索引从未被使用过),这个必须是MySQL服务运行了好长时间,并且业务代码的相关sql运行了一段时间,这样统计出来的sql才具有一定的参考价值


\'tidb03\' root@localhost 19:44:29 (none)> select * from sys.schema_unused_indexes limit 1\\G

*************************** 1. row ***************************

object_schema: canal_manager

object_name: canal_config

index_name: sid_UNIQUE

1 row in set (0.00 sec)




    推荐阅读