目前tidb有可用的查看索引使用次数的功能吗

场景就是找到用的次数少的(重复的)索引进行删除释放空间.

搜了下论坛
有两个帖子讨论这个问题

这个帖子里给出的解决方案是无效的 到目前为止 mysql.SCHEMA_INDEX_USAGE 这个表里的数据都是空的(是不是功能未实现?)

第二个帖子:

这个帖子里给出的sql可以执行出来

select `information_schema`.`statistics`.`TABLE_SCHEMA` AS `table_schema`,`information_schema`.`statistics`.`TABLE_NAME` AS `table_name`,`information_schema`.`statistics`.`INDEX_NAME` AS `index_name`,max(`information_schema`.`statistics`.`NON_UNIQUE`) AS `non_unique`,max(if(isnull(`information_schema`.`statistics`.`SUB_PART`),0,1)) AS `subpart_exists`,group_concat(`information_schema`.`statistics`.`COLUMN_NAME` order by `information_schema`.`statistics`.`SEQ_IN_INDEX` ASC separator ',') AS `index_columns` from `information_schema`.`statistics` where ((`information_schema`.`statistics`.`INDEX_TYPE` = 'BTREE') and (`information_schema`.`statistics`.`TABLE_SCHEMA` not in ('mysql','sys','INFORMATION_SCHEMA','PERFORMANCE_SCHEMA'))) group by `information_schema`.`statistics`.`TABLE_SCHEMA`,`information_schema`.`statistics`.`TABLE_NAME`,`information_schema`.`statistics`.`INDEX_NAME`

但是题主问的是mysql,而不是tidb,这个sql在tidb起到的效用是一样的么

目前tidb没有记录这个,mysql主要是在performance_schema.table_io_waits_summary_by_index_usage 这个表里记录了索引的使用情况,而tidb是没记录这个

查了一下,能查出来,但不知道是不是你要的效果

你发的第一个帖子里面给出的方法可以查出来吧,我执行这个语句能查出来。

SELECT 
	INDEX_NAMES,EXEC_COUNT 
FROM INFORMATION_SCHEMA.statements_summary
WHERE INDEX_NAMES IS NOT NULL

有个参考就行

你发这sql在tidb中没啥用

我试了查不出来,返回0行

有可能你现在的查询都没有用到索引
image

研究了下,tidb默认用的主键索引是聚簇索引,这个是统计不了的。额外添加的二级索引使用后能查到的。

我截图里的第二行就是主键索引

主键索引统计有问题,你可以查查用这个主键索引查数据几次,这里的查到值不会增长,二级索引是正常计数的

1 个赞

这个表好像不全吧 一共才400多条记录 如果加了INDEX_NAMES IS NOT NULL 这个条件就剩下70条了 看了下时间都是当天的

感觉上像是最近一段时间的