在网上可以查到有两种方式查询表的索引
show index from tablename
SELECT * FROM mysql.innodb_index_stats a WHERE a.database_name = '数据库名' and a.table_name like '%表名%';
第一种是可行的,问题是在于并不是用SELECT语句,所以就不能和其他的表数据一起查询,譬如说
查询表结构的时候连同索引一起查询。
(第二种来自于网络,实际上语句本身就有错误和低效的like,我们先只看逻辑)
仅看第二种也是不可行的,因为除了ROOT用户以外的用户无法访问innodb_index_stats表,所以是不行的。
在网上翻了很多页面都没有找到合适的解决方案,于是我把所有独立数据库用户身份可以查看的表全部翻看一遍之后发现。STATICS表中是存有索引数据的。
查询方式如下:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = basename AND TABLE_NAME = tablename
将索引信息和表结构信息一起查看的查询:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS LEFT JOIN INFORMATION_SCHEMA.STATISTICS ON COLUMNS.COLUMN_NAME=STATISTICS.COLUMN_NAME AND COLUMNS.TABLE_NAME = STATISTICS.TABLE_NAME AND STATISTICS.TABLE_SCHEMA = '{$basename}' AND STATISTICS.TABLE_NAME = '{$tablename}' WHERE COLUMNS.TABLE_SCHEMA = '{$basename}' AND COLUMNS.TABLE_NAME = '{$tablename}'
这里一定要注意使用表内筛选 先将STATISTICS表中的数据过滤一遍,再进行合并,两张表都要以basename,tablename进行过滤。否则会有很大概率得到循环嵌套的大量结果!
最近回复