0
我有這樣定義的兩個表:高效的查詢查找的東西,在一個字索引
Page(id), Index(page_id, word)
PAGE_ID在指數是一個外鍵頁,使每一頁 連接到一組索引條目。索引表是 Page表的索引,因此您可以進行快速文本搜索。 E.g:
SELECT page_id FROM Index where word = 'hello'
會選擇所有PAGE_ID的包含文字 '你好' 的所有頁面。但是現在我想爲包含 所有單詞'word1','word2'和'word3'的頁面選擇所有page_id。我可以 想出這樣做的最好的查詢是:
SELECT page_id
FROM Index
WHERE word IN ('word1', 'word2', 'word3')
GROUP BY page_id
HAVING COUNT(1) = 3;
它的工作原理,但我不知道是否有人能想到可選的更 高效的查詢的?
上面的例子稍微簡化了。在實際的索引表中,單詞被引用Word表的word_id列替換。但基本方法是一樣的。 RDBMS是PostgreSQL,索引表中有大約2百萬行,在Page中有20K行。
謝謝,你說得對。在這種情況下,page_id和word是唯一的,因此不需要使用不同的檢查。我已經證實,這是導致性能下降的這個查詢。 – 2009-12-11 12:22:38
@BjörnLindqvist:然後發佈完整的問題與查詢計劃「explain」:) –
Andomar
2009-12-11 22:38:16