最近,当我遇到一些慢查询时,我在EXPLAIN计划中看到了“使用sort_union(sourceClass,destinationClass)”这一短语。
当我使用与每个索引的FORCE INDEX相同的查询分别运行EXPLAIN时,由于数据分布,我看到它几乎正在进行全表扫描。
我知道这是为了提高性能,这个决定仅由查询优化器决定。
在我的查询中,键和查询就像这样
sourceClass: KEY (`sourceClass`,`sourceId`,`kind`)
destinationClass: KEY (`destinationClass`,`destinationId`,`kind`),
query:
WHERE (sourceClass='channel' && sourceId=1016) || (destinationClass='channel'
&& destinationId=1016)
我想知道优化器什么时候选择它并且由于这种发现结果有什么缺点?
答案 0 :(得分:1)
您可以从查询优化器中获得所有最好的方法,因此它不一定能找到最佳解决方案,而是在一段时间内找到的最佳解决方案。如果你想要改变它,你需要创建一个改进查询或改变数据库设计的索引,查询优化器会看到它,它会选择它作为一个更好的查询计划。