Postgresql
發現失去的外鍵和/或索引
我們有一個相當大的數據庫(大約 700GB 的數據),它是繼承給我們的,並且有幾個 DBA。隨著時間的推移,我們意識到缺少幾個外鍵和索引。
我想知道是否有某種自動化方法可以使用某種日誌解析或類似方法來發現此類潛在的失去鍵/索引。
我記得前段時間在一篇文章中看到了一個查詢,因此快速搜尋導致:
CREATE FUNCTION pg_temp.sortarray(int2[]) returns int2[] as ' SELECT ARRAY( SELECT $1[i] FROM generate_series(array_lower($1, 1), array_upper($1, 1)) i ORDER BY 1 ) ' language sql; SELECT conrelid::regclass ,conname ,reltuples::bigint FROM pg_constraint JOIN pg_class ON (conrelid = pg_class.oid) WHERE contype = 'f' AND NOT EXISTS ( SELECT 1 FROM pg_index WHERE indrelid = conrelid AND pg_temp.sortarray(conkey) = pg_temp.sortarray(indkey) ) ORDER BY reltuples DESC ;
來自http://mlawire.blogspot.nl/2009/08/postgresql-indexes-on-foreign-keys.html
那會給你你想要的。
並且還找到了https://github.com/pgexperts/pgx_scripts/blob/master/indexes/fk_no_index.sql但我自己沒有使用過這個。