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