查找单列索引
问题描述:
我试图找出某列是否索引(本身)。换句话说,我不想拉多列的指数。查找单列索引
有人可以帮助我重写这只拉单列索引?
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
,但一般有一个简单的列(不使用COUNT
,MAX
,...)在select
-list未在group
语句来上市,导致不可预测的行为,参见sql antipattern。
答
无子选择改写...
这将为特定的指数收益表和索引的名字它是一个单一的(不明)列
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;
这不起作用。这仍列出所有具有该列名称的索引,而不管它是否为单列多列索引。 – user3299633
是的,抱歉,当我将测试环境中的查询复制到SO时,我犯了一个错误。你应该在内部查询中删除'和column_name ='column''。我已经更新了答案。如果您已经指定了'column_name',那么没有其他列留给'COUNT'。 – sauerburger
您是否仍然遇到此解决方案的问题? – sauerburger