我試圖找出某列是否索引(本身)。換句話說,我不想拉多列的指數。查找單列索引
有人可以幫助我重寫這隻拉單列索引?
select table_name, index_name
from information_schema.statistics
where table_schema='schema' and table_name='table' and column_name='column';
我試圖找出某列是否索引(本身)。換句話說,我不想拉多列的指數。查找單列索引
有人可以幫助我重寫這隻拉單列索引?
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