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

标签 mysql performance

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

相关文章:

java - 来自数据库的 jfreechart 散点图

c# - 使用 NHibernate 的简单获取(使用按代码映射)非常慢

php - MySQL慢查询日志的应用程序特定数据?

mysql - 在ubuntu ec2实例中拒绝访问用户时如何重置root密码

mysql - 在应用 LIMIT 之前如何计算所选行的总数?

php - 我如何进行这个选择查询?

python - 意外的慢cython卷积代码

objective-c - 由于文本标签而导致 UICollectionView 滚动不稳定

android - 为什么 WebView 比 TextView 快这么多

mysql - 转向 SQL Access