我对 MySQL 中的索引非常陌生。我知道,我可能应该早点知道,但大多数项目都足够小,我可以不用它;)
所以,现在我正在测试它。我通过在查询上运行 EXPLAIN
进行了测试:
查询:
EXPLAIN SELECT a . *
FROM `tff__keywords2data` AS a
LEFT JOIN `tff__keywords` AS b ON a.keyword_id = b.id
WHERE (
b.keyword = 'dog' || b.keyword = 'black' || b.keyword = 'and' || b.keyword = 'white'
)
GROUP BY a.data_id
HAVING COUNT( a.data_id ) =4
首先,没有索引我得到了这些结果:
然后,通过 data_id 和 keyword_id 的索引,我得到了这个:
据我了解,MySQL 必须搜索的行数从 61k 下降到 10k,这一定不错吧?
所以我的问题是,我在这里正确吗?在尝试优化时还有什么我可以考虑的吗?
更新:
此外,在 AJ 和 Piskvor 的帮助指出我的另一个表及其列关键字没有索引后,我得到了这个:
进步很大!对吧?
最佳答案
如您所见,用于表 b
的 key
仍然是 NULL
。您可能想在 b.keyword
上添加索引并匹配
WHERE b.keyword IN ('dog','black','and','white')
这在功能上与您的 WHERE
子句不同,尽管它返回相同的结果。
看起来,您可能对全文搜索感兴趣。
关于php - 使用索引改进 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717797/