查找单列索引

问题描述:

我试图找出某列是否索引(本身)。换句话说,我不想拉多列的指数。查找单列索引

有人可以帮助我重写这只拉单列索引?

select table_name, index_name 
from information_schema.statistics 
where table_schema='schema' and table_name='table' and column_name='column'; 

您可以在子查询中按照名称对索引进行分组,然后选择唯一的索引。

select index_name from 
    (select index_name, COUNT(*) as col_count 
    from information_schema.statistics 
    where table_schema='schema' and table_name='table' 
    group by index_name) as sub 
where col_count = 1 

您可能要添加到column_name内外select -list;和外部where条件。这可能会在这种情况下工作,因为条件col_count = 1,但一般有一个简单的列(不使用COUNTMAX,...)在select -list未在group语句来上市,导致不可预测的行为,参见sql antipattern

+0

这不起作用。这仍列出所有具有该列名称的索引,而不管它是否为单列多列索引。 – user3299633

+0

是的,抱歉,当我将测试环境中的查询复制到SO时,我犯了一个错误。你应该在内部查询中删除'和column_name ='column''。我已经更新了答案。如果您已经指定了'column_name',那么没有其他列留给'COUNT'。 – sauerburger

+0

您是否仍然遇到此解决方案的问题? – sauerburger

无子选择改写...

这将为特定的指数收益表和索引的名字它是一个单一的(不明)列

SELECT table_name, index_name 
FROM information_schema.statistics 
WHERE table_schema='schema' 
AND table_name='table' 
AND index_name = 'index' 
GROUP BY table_name, index_name 
HAVING COUNT(*) = 1; 

这是相同的在给定表中的所有单列索引

SELECT table_name, index_name 
FROM information_schema.statistics 
WHERE table_schema='schema' 
AND table_name='table' 
GROUP BY table_name, index_name 
HAVING COUNT(*) = 1; 

最后,所有单列索引在给定的数据库

SELECT table_name, index_name 
FROM information_schema.statistics 
WHERE table_schema='schema' 
GROUP BY table_name, index_name 
HAVING COUNT(*) = 1;