我试图找出某个列是否被索引(单独)。换句话说,我不想拉出多列的索引。
有人可以协助我重写这个只能拉单列索引吗?
select table_name, index_name
from information_schema.statistics
where table_schema='schema' and table_name='table' and column_name='column';
答案 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
中有一个简单的列(不使用MAX
,select
,...) } -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;