查找单列索引

时间:2017-10-09 20:41:39

标签: mysql indexing information-schema

我试图找出某个列是否被索引(单独)。换句话说,我不想拉出多列的索引。

有人可以协助我重写这个只能拉单列索引吗?

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

2 个答案:

答案 0 :(得分:0)

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

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 - 列表中;和外where - 条件。这可能适用于这种情况,因为条件col_count = 1,但通常在COUNT中有一个简单的列(不使用MAXselect,...) } -list未列在group - 语句中,导致不可预测的行为,参见sql antipattern

答案 1 :(得分:0)

在没有子选择的情况下重写...

这将返回特定索引的表和索引名称,它位于单个(未指定)列上

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;