JOIN查询是否比多个查询快?(运行主查询,然后根据主查询的结果运行许多其他select)
我这么问是因为加入它们会使我的应用程序的设计复杂化
如果它们快了,有人能大致估计出快了多少吗?如果是1.5倍,我不在乎,但如果是10倍,我就在乎。
JOIN查询是否比多个查询快?(运行主查询,然后根据主查询的结果运行许多其他select)
我这么问是因为加入它们会使我的应用程序的设计复杂化
如果它们快了,有人能大致估计出快了多少吗?如果是1.5倍,我不在乎,但如果是10倍,我就在乎。
当前回答
是的,使用join的查询会更快。虽然不知道要查询的表之间的关系、数据集的大小或主键的位置,但几乎不可能说速度有多快。
为什么不把这两种情况都测试一下,然后你就会确定……
其他回答
根据数据库的复杂性与开发人员的复杂性的不同,执行多次SELECT调用可能更简单。
尝试对JOIN和多个select运行一些数据库统计信息。看看在您的环境中,JOIN是否比SELECT更快/更慢。
然后,如果将其更改为JOIN将意味着额外的一天/一周/一个月的开发工作,我将坚持使用多个select
欢呼,
BLT
是的,使用join的查询会更快。虽然不知道要查询的表之间的关系、数据集的大小或主键的位置,但几乎不可能说速度有多快。
为什么不把这两种情况都测试一下,然后你就会确定……
构造单独的查询和连接,然后计算每个查询的时间——没有什么比真实的数字更有帮助了。
然后更好的是在每个查询的开头添加“EXPLAIN”。这将告诉您MySQL使用了多少子查询来回答您的数据请求,以及每个查询扫描了多少行。
根据我的经验,我发现运行几个查询通常更快,特别是在检索大型数据集时。
当与来自另一个应用程序(如PHP)的数据库交互时,到服务器的一次访问要比多次访问多。
还有其他方法可以限制访问服务器的次数,同时仍然运行多个查询,这些方法通常不仅更快,而且使应用程序更易于阅读—例如mysqli_multi_query。
当涉及到SQL时,我不是新手,我认为对于开发人员,尤其是新手来说,有一种趋势是花费大量时间试图编写非常聪明的连接,因为它们看起来很聪明,而实际上有一些聪明的方法来提取数据,看起来很简单。
最后一段是我的个人观点,但我希望这能有所帮助。我同意其他人的观点,尽管他们认为你应该进行基准测试。两种方法都不是灵丹妙药。
就吞吐量而言,它会更快吗?可能。但它也可能一次锁定更多的数据库对象(取决于您的数据库和模式),从而降低并发性。根据我的经验,人们经常被“更少的数据库往返”的说法所误导,而在现实中,在大多数OLTP系统中,数据库位于同一个LAN上,真正的瓶颈很少是网络。