我想知道 Postgres 是否支持優化以下基本問題。
我想再次搜索通過外鍵連接的不同表上的兩列。我為每一列創建了一個索引。如果我執行我的連接查詢并且有一個或另一列的 where 條件,則相應的索參考于過濾結果并且查詢性能非常好。如果對每個表上的一個欄位使用由 OR 組合的兩個 where 子句,則查詢會變得非常慢并且不使用索引。大概這是因為優化器認為除了執行全表連接和掃描來解決之外別無他法。查詢如下所示:
select table1.id
from table1
left join table2 on table1.fk = table2.id
where table1.haystack ilike '%needle%' or table2.haystack ilike '%needle%'
操作(ilike)不是問題并且可以互換,我有一個有效的 Trigram 索引設定。我只想找出除了將所有搜索欄位非規范化到一個表中之外,是否還有其他方法可以使這種型別的查詢具有高性能。
我會非常感謝任何想法。
uj5u.com熱心網友回復:
不,資料庫中沒有特殊支持來優化這一點。自己做:
SELECT table1.id
FROM table1
JOIN table2 ON table1.fk = table2.id
WHERE table1.haystack ILIKE '%needle%'
UNION
SELECT table1.id
FROM table1
JOIN table2 ON table1.fk = table2.id
WHERE table2.haystack ILIKE '%needle%'
如果這兩個條件都是有選擇性的,并且使用三元組索引編制索引,并且您在連接條件上有索引,那么速度會更快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361568.html
標籤:PostgreSQL的
