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

演示环境mysql5.7.22


查看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语句
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.


下面是此表的表结构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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.


查看未使用的索引:

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.


posted @ 2021-09-21 10:25  勤奋的蓝猫  阅读(9)  评论(0编辑  收藏  举报  来源