就性能而言,哪个更好?
答案 0 :(得分:21)
只有一种方法可以知道:时间。
通常,我认为单个连接可以使数据库进行大量优化,因为它可以看到它需要扫描的所有表,减少了开销,并且可以在本地构建结果集。
最近,我有大约100个select语句,我在代码中更改为JOIN。通过几个索引,我可以从1分钟的运行时间到大约0.6秒。
答案 1 :(得分:14)
单个联接通常会胜过多个单一选择。但是,有太多不同的案例适合您的问题。在一个简单的规则下将它们混为一谈是不明智的。
更重要的是,如果您和下一个程序员在使用SQL时“说同一种语言”,单个连接通常会更容易让下一个程序员理解和修改。我在谈论元组集的语言。
同样重要的是,数据库物理设计和查询设计需要首先关注的问题将导致十分之一的速度改进,而不是10%的速度改进。如果你做了数以千计的简单选择而不是单个连接,那么你可能会获得十分之一的优势。如果您正在进行三到四次简单选择,那么您不会以某种方式看到任何重大改进。
答案 2 :(得分:11)
不要尝试将自己的连接循环编写为一堆选择。您的数据库服务器有许多用于连接的聪明算法。此外,您的数据库服务器可以使用统计信息和估计的访问成本来动态选择连接算法。
数据库服务器的连接算法通常比你编写的任何东西都要好。他们更了解物理I / O,缓存和什么不是。
这使您可以专注于您的问题域。
答案 3 :(得分:6)
除了已经说过之外,要考虑的一件事是,选择将通过网络返回比连接可能更多的数据。如果网络连接已经成为瓶颈,这可能会使情况变得更糟,特别是如果经常这样做的话。也就是说,在任何性能情况下,最好的选择是测试,测试和测试。
答案 4 :(得分:5)
这完全取决于数据库如何优化连接以及索引的使用。
我有一个缓慢而复杂的查询,有很多连接。然后我将其细分为2或3个不太复杂的查询。性能提升令人惊讶。
但最终,“它取决于”,你必须知道瓶颈在哪里。
答案 5 :(得分:1)
如前所述,没有背景就没有正确答案。
答案取决于(从我的头脑中):
答案 6 :(得分:0)
如果您正在使用SQL Server(我不确定这是否可用于其他RDBMS),我建议您将执行计划与查询结果捆绑在一起。这将使您能够准确查看查询的执行方式以及导致任何瓶颈的原因。
在您了解SQL Server实际执行的操作之前,我不会猜测哪个查询更好。
答案 7 :(得分:0)
如果你的数据库有很多数据....并且有多个连接,那么请使用索引来获得更好的性能。
如果在这种情况下有左/右外连接,则使用多个选择。
这一切都取决于你的数据库大小,你的查询,索引(也包括主键和外键)......你的问题上的是/否,你无法得出结论。