mysql:使用sort_union(sourceClass,destinationClass);在EXPLAIN计划中

时间:2012-05-29 14:09:19

标签: mysql performance

最近,当我遇到一些慢查询时,我在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) 

我想知道优化器什么时候选择它并且由于这种发现结果有什么缺点?

1 个答案:

答案 0 :(得分:1)

您可以从查询优化器中获得所有最好的方法,因此它不一定能找到最佳解决方案,而是在一段时间内找到的最佳解决方案。如果你想要改变它,你需要创建一个改进查询或改变数据库设计的索引,查询优化器会看到它,它会选择它作为一个更好的查询计划。