我的查询有一个连接,看起来它使用了两个索引,这使它变得更加复杂。我不确定我是否能改进这一点,但我想我会问一下。
该查询生成一个记录列表,其中包含与要查询的记录相似的关键字。
这是我的问题。
SELECT match_keywords.padid,
COUNT(match_keywords.word) AS matching_words
FROM keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
WHERE match_keywords.word IS NOT NULL
AND current_program_keywords.padid = 25695
GROUP BY match_keywords.padid
ORDER BY matching_words DESC
LIMIT 0, 11 解释

单词是varchar(40)。
发布于 2011-01-26 18:50:15
您可以从尝试删除IS NOT NULL测试开始,该测试通过字段上的COUNT隐式删除。看起来你也想从match_keywords中省略25695,否则25695 (或其他)肯定会在你的11行限制内显示为“最佳”匹配?
SELECT match_keywords.padid,
COUNT(match_keywords.word) AS matching_words
FROM keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
WHERE current_program_keywords.padid = 25695
GROUP BY match_keywords.padid
ORDER BY matching_words DESC
LIMIT 0, 11接下来,考虑一下你作为一个人会怎么做。
你可以从一个padid (25695)开始,然后从那些单词列表中检索出该padid的所有单词,再次回到表格中,对于每个匹配的单词,获取它们的padid(假设在padid + word)
对于包含3个单独的单列索引的列表,前两步(都只涉及2列)总是必须从索引跳回到数据,才能获得另一列。覆盖索引可能会有所帮助-创建两个复合索引以进行测试
create index ix_keyword_pw on keyword(padid, word);
create index ix_keyword_wp on keyword(word, padid);有了这些复合索引之后,您就可以删除padid和word上的单列索引了,因为这两个索引涵盖了它们。
注意:您必须始终针对以下情况调整SELECT性能
store)
发布于 2011-01-30 11:45:40
尝试执行以下操作...确保索引在PadID上,一个在WORD上。然后,通过更改SELECT WHERE限定符的顺序,首先优化CURRENT关键字的PADID,然后连接到其他关键字...排除对自身的联接。此外,由于您检查了内连接与匹配关键字的等价性...如果检查current关键字是否为null,则它永远不应连接到NULL值,从而消除了对匹配关键字别名的比较,因为将每次比较都视为查找NULL...
SELECT STRAIGHT_JOIN
match_keywords.padid,
COUNT(*) AS matching_words
FROM
keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
and match_keywords.padid <> 25695
WHERE
current_program_keywords.padid = 25695
AND current_program_keywords.word IS NOT NULL
GROUP BY
match_keywords.padid
ORDER BY
matching_words DESC
LIMIT
0, 11 发布于 2011-01-20 15:28:31
您应该为以下字段建立索引(检查与哪个表对应)
match_keyword.padid
current_program_keywords.padid
match_keyword.words
current_program_keywords.words
希望它能帮助加速
https://stackoverflow.com/questions/4744380
复制相似问题