如何找出MySQL中没有索引的表

jam*_*mes 5 mysql sql indexing

我正在处理一个有大约300个表的数据库,我正在寻找一种方法来查找没有索引的所有表(不包括PRIMARY).理想情况下,我想得到一个结果集,它给出了每个表的索引数量的计数.我使用这样的查询尝试了这个:

SELECT 
  table_name, column_name, index_name, count(table_name) as index_count 
FROM 
  information_schema.statistics 
WHERE 
  index_name != 'primary' 
AND
  table_schema = 'your_database'
GROUP BY
  table_name
Run Code Online (Sandbox Code Playgroud)

但它没有返回准确的结果.任何帮助,将不胜感激

bpg*_*rgo 8

这将导致那些根本没有索引的表(甚至不是主键)

select * from INFORMATION_SCHEMA.tables
where table_schema = 'your_database'
and table_name not in 
(
select  table_name -- , count(*) 
from (
SELECT  table_name, index_name
FROM information_schema.statistics 
WHERE table_schema = 'your_database'
GROUP BY  table_name, index_name) tab_ind_cols
group by table_name
)
Run Code Online (Sandbox Code Playgroud)


小智 5

select 
    t.table_schema,t.table_name,engine 
from 
    information_schema.tables t 
    inner join information_schema .columns c  
        on t.table_schema=c.table_schema and t.table_name=c.table_name 
group by 
    t.table_schema,t.table_name   
having 
    sum(if(column_key in ('PRI','UNI'), 1,0)) = 0;
Run Code Online (Sandbox Code Playgroud)

此选择有效,但如果表不是PRIMARY或Unique则返回