最近,当我遇到一些慢查询时,我在 EXPLAIN 计划中看到了“Using 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)
我想知道优化器什么时候会选择这个,这种查找结果有什么缺点吗?
最佳答案
您对查询优化器的期望是尽力而为的方法,因此它不一定会找到最佳解决方案,而是在特定时间段内可以找到的最佳解决方案。如果您想改善这一点,您需要创建一个索引来改进查询或更改数据库的设计,查询优化器会看到这一点,并将选择它作为更好的查询计划。
关于mysql: 使用 sort_union(sourceClass,destinationClass);在解释计划中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10800862/