У меня есть этот запрос в PostgreSQL:Как правильно использовать индекс на несколько столбцов
SELECT cte.*
FROM (
select ......
from A a
left join B b using (id)
left join C c on (c.cid=a.cid)
left join D d on (d.did=c.did)
left join E e on (e.eid=d.eid)
left JOIN (F f
JOIN (SELECT func() AS funcid) x ON f.fid = x.fid) ON a.id = f.id
left join G g on (g.gid=c.gid)
left join H h on (h.hid=c.hid)
where b.userid= first_param
order by .....
) as cte
where cte.issuedate=second_param
Этот запрос работает с 2-мя параметрами: first_param
является INTEGER
и second_param
является DATE
- Оба они связаны с полями таблицы B
Этот запрос генерирует данные на моем основном рабочем экране, поэтому его можно использовать много раз.
Моя дилемма из-за структуры запроса, так как first_param
и second_param
в «различном уровне» из запроса, я не знаю, должен ли я создать индекс на обоих столбцы вместе или индекса каждого столбца по отдельности? Кроме того, second_param
доступ из общих табличных выражений, а не непосредственно из B
Другими словами ... выбор между:
CREATE INDEX name_a
ON B
USING btree
(userid,issuedate);
ИЛИ:
CREATE INDEX name_aa
ON B
USING btree
(userid);
CREATE INDEX name_ab
ON B
USING btree
(issuedate);
Руководящие принципы индексов говорит что если мы будем использовать 2 столбца вместе много раз, тогда мы должны проиндексировать их вместе, но в этом случае я не уверен ...
Can вы советуете?