![]() |
1
12
如果您认为left join的实现是内部join+more work,那么这个结果是令人困惑的。如果内部连接的实现是(左连接+过滤)呢?啊,现在很清楚了。 在查询计划中,唯一的区别是: 用户…额外:使用位置 . 这意味着过滤。有一个 额外过滤步骤 在具有内部连接的查询中。 这是一种不同于通常在where子句中使用的筛选。在上创建索引以支持此筛选操作很简单。
请考虑以下查询:
此查询等效于内部联接。B上没有索引可帮助执行筛选操作。原因是where子句在联接结果上声明一个条件,而不是在b上声明一个条件。 |
![]() |
2
6
这可能是因为内部连接必须检查两个表中的每一行,以查看列值(在您的示例中是电子邮件)是否匹配。不管怎样,左联接都将从一个表返回所有值。如果它被编入索引,那么它也会知道该怎么做才能更快。 |
![]() |
3
4
表基数对查询优化器有影响。我猜小表,因为你已经使内部连接更复杂的操作。一旦您拥有的记录超过了db服务器希望保留在内存中的记录,内部连接就可能开始优于左连接。 |
![]() |
4
2
在我看来,你陷入了所谓的过早优化的陷阱。查询优化器是非常变化无常的事情。我的建议是,在您确定某个特定的连接有问题之前,继续前进。 |
![]() |
5
0
试试这个:
这会给你带来额外的表现,因为:
如果您没有发现任何性能改进,则将所有列集替换为“count(*)”,然后执行左侧/内部测试。这样,不管查询是什么,您将只检索一行一列(计数),因此您可以放弃返回字节数是查询缓慢的原因:
祝你好运 |
![]() |
6
-3
左连接返回的行比内部连接返回的行多,因为这两个连接不同。
但对于您的问题,您是否启用了查询缓存? 尝试使用运行查询
除此之外,我会用更多的数据填充表,运行
看看会发生什么。 |
![]() |
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
![]() |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
![]() |
Prince · 复制大型文件需要更多时间 2 年前 |
![]() |
Sagar · 为什么在循环之外声明变量会更快? 2 年前 |
![]() |
seco · 如何在不挂起页面的情况下加载JS 2 年前 |