1 changed files with 19 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||||||
|
--list single-column indexes which have only 5 or less distinct values in 95+% of rows with not null values. |
||||||
|
--so they possibly may be replaced with partial indexes to save disk space. |
||||||
|
|
||||||
|
SELECT |
||||||
|
pg_index.indrelid::regclass AS table, |
||||||
|
pg_attribute.attname AS column, |
||||||
|
pg_index.indexrelid::regclass AS index, |
||||||
|
pg_stats.null_frac, |
||||||
|
pg_stats.most_common_freqs[1:5] AS most_common_freqs, |
||||||
|
(pg_stats.most_common_vals::text::text[])[1:5] AS most_common_vals, |
||||||
|
pg_size_pretty(pg_relation_size(pg_index.indexrelid)) AS index_size, |
||||||
|
pg_get_indexdef(pg_index.indexrelid) AS index_def |
||||||
|
FROM pg_index |
||||||
|
JOIN pg_attribute ON pg_attribute.attrelid = pg_index.indrelid AND pg_attribute.attnum = ANY(pg_index.indkey) |
||||||
|
JOIN pg_stats ON (pg_stats.schemaname || '.' || pg_stats.tablename)::regclass = pg_attribute.attrelid AND pg_stats.attname = pg_attribute.attname |
||||||
|
WHERE pg_relation_size(pg_index.indexrelid) > 10*8192 |
||||||
|
AND (SELECt SUM(a) FROM unnest(most_common_freqs[1:5]) a) >= 0.95 |
||||||
|
AND array_length(pg_index.indkey, 1) = 1 |
||||||
|
ORDER BY pg_relation_size(pg_index.indexrelid) DESC,1,2,3; |
||||||
Loading…
Reference in new issue