сегодня я с удивлением узнал, что запрос вида:
SELECT COUNT(DISTINCT foo) FROM bar
может оказаться во много (в моем случае - в пять!) раз медленнее, чем вот такое извращение:
SELECT COUNT(*) FROM (SELECT DISTINCT foo FROM bar) AS foo
потому что у постгреса планировщик настолько тупой и убогий, что не в состоянии использовать в первом случае индекс на колонке, блядь.
и это еще не предел дебилизма, есть хуже. в некоторых случаях в постгресе не подключаются индексы, если в запросе вида
SELECT foo FROM bar не указано ORDER BY foo. это уже просто полный пиздец, извините.
SELECT foo FROM bar
а куда тут индекс?
туда, что у меня таких foo 150 тыщ в таблице. как я писал выше, разница получается в 5 раз.
P.S. собственно, как ты понимаешь в таблице есть не только это самое foo...
а как индекс ускоряет выдачу всех стрк в таблице?
запрос почитай, а? видишь там count и distinct? они не просто так. =)
а, ты про вторую часть. хз как, но ускоряет. не в 5 раз, а где-то в два.