Ivan Durak |
---|
Maxim Boguk |
---|
Я бы для начала сделал бы индексы по f1-f5 и date а дальше |
зачем? |
(date);
(f1,date);
(f2,date);
(f3,date);
(f4,date);
(f5,date);
для условий вида
WHERE fn IN(..) AND date BETWEEN
обычно таки именно такого плана запросы предполагаются.
для остальных выборок по началу -- bitmap index scan-ы [т.н. фоксовский rushmore]
если же популярен набор вида
WHERE bool_AND(fi =vi) AND date between <<>>
с фиксированным набором
то можно подшаманить более сложносоставными индексами. главное знать -- насколько всё плохо.
собрать статистику, всё лишнее снести
есть идиотская идея -- сделать btree_gist на ((ARRAY[f1..f5]), date) или даже на( hstore(f1..fn),date) -- в некоторых случаях может проканать модифицировать условия фильтра так, чтобы предвыборка шла по этому хитровыстроенному индексу, а точный фильр -- по изначальному, не модифицированному условию. (смотреть надо на условия, в их многообразии)для группбая же по всей массе -- ничего не годно. только материализация. (там какие-то словеса можно гребсти про грануляцию, и т.п.)