jam*_*lin 12 php mysql indexing optimization
我对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
Run Code Online (Sandbox Code Playgroud)
首先,没有索引我得到了这些结果:

然后,使用data_id和keyword_id上的索引,我得到了这个:
据我所知,MySQL必须搜索的行数从61k减少到10k,这一定是好的吗?
所以我的问题是,我在这里是否正确?在尝试优化时,我还有什么可以考虑的吗?
更新:
此外,在AJ和Piskvor的一些帮助指出我的另一个表及其列关键字没有索引后,我得到了这个:

好大的改进!对?
如您所见,key用于表的b仍然是NULL. 您可能想要添加索引b.keyword并匹配
WHERE b.keyword IN ('dog','black','and','white')
Run Code Online (Sandbox Code Playgroud)
WHERE尽管它返回相同的结果,但它在功能上与您的子句不同。
看起来,您可能对全文搜索感兴趣。