這個問題在這里已經有了答案: 使用 varchar_pattern_ops 索引的列的順序掃描 1 個回答 23 小時前關閉。
在我的資料庫中,我創建了一個索引
CREATE INDEX meeting_name_idx ON swoosh.meeting (meeting_name varchar_pattern_ops);
因此,根據我為“會議”表提供的索引,如果我這樣做:
Explain SELECT meeting_name FROM meeting WHERE meeting_name like 'Pro%';
我會得到
index only scan using meeting_name_idx on meeting
但是如果我%在這種情況下改變了
Explain SELECT meeting_name FROM meeting WHERE meeting_name like '%Pro';
結果將是順序掃描,這是為什么呢?
uj5u.com熱心網友回復:
當您在meeting_name文本列上創建默認索引時,它將創建一個 B 樹資料結構。這個 B 樹本質上只允許從會議名稱的最開頭開始查找,而不是從字串中的某個任意位置開始查找。因此以下WHERE子句可以利用索引:
WHERE meeting_name = 'Professional SQL Users'
WHERE meeting_name = 'Pro%'
以下不能使用索引:
WHERE meeting_name LIKE '%Pro%';
請注意,即使對于上述情況,Postgres 實際上仍然可以使用索引,但它必須執行完整索引掃描,以及在聚集索引中進行多次查找。在這種情況下,Postgres 很可能更愿意只掃描原始表并避免使用索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362596.html
標籤:sql PostgreSQL的
