我应该使用一个大的 SQL Select 语句还是几个小的 SQL Select 语句?
Posted
技术标签:
【中文标题】我应该使用一个大的 SQL Select 语句还是几个小的 SQL Select 语句?【英文标题】:Should I use one big SQL Select statement or several small ones? 【发布时间】:2010-09-08 12:01:09 【问题描述】:我正在使用从 mysql 发送的数据构建一个 php 页面。
有没有更好
1SELECT
查询与 4 个表连接,或
4 个小 SELECT
查询,没有表连接;我确实从 ID 中选择
哪种方法更快,每种方法的优缺点是什么?我只需要每个表中的一行。
【问题讨论】:
【参考方案1】:如果您真的很担心,您应该运行一个分析工具,因为它取决于很多事情并且可能会有所不同,但通常最好编译更少的查询和更少的数据库往返。
确保尽可能使用 where 和 join on 子句过滤内容。
但老实说,这通常无关紧要,因为与数据库可以做的相比,您可能不会受到那么大的打击,所以除非优化是您的规范,否则您不应该过早地做它并做最简单的事情。
【讨论】:
【参考方案2】:一般来说,最好有一个 SELECT 语句。拥有数据库的主要原因之一是它们处理信息的速度很快,尤其是查询格式的信息。
如果这种方法有任何缺点,那就是有些类型的分析无法用一个大的 SELECT 语句来完成。 RDBMS 纯粹主义者会坚持认为这是一个数据库设计问题,在这种情况下,您将回到我最初的建议。
【讨论】:
【参考方案3】:当您使用 JOIN 而不是多个查询时,您允许数据库应用其优化。您还可能会检索不需要的行(如果您要用多个选择替换 INNER 联接),这会增加您的应用程序服务器和数据库服务器之间的网络流量。即使它们在同一个盒子上,这也很重要。
【讨论】:
【参考方案4】:这可能取决于您从数据库中获取数据后如何处理数据。如果您独立使用这四个结果中的每一个,那么拥有四个单独的 SELECT 语句会更加合乎逻辑和清晰。另一方面,如果您将所有数据一起使用,例如在表中创建统一的行之类的,那么我会使用单个 SELECT 和 JOIN。
我已经完成了一些 PHP/MySQL 工作,我发现即使对于包含大量 JOIN 的大型表的查询,数据库也非常擅长优化 - 如果您有智能索引的话。因此,如果您对性能很认真,请开始阅读 query optimization and indexing。
【讨论】:
【参考方案5】:我会说 1 个带有连接的查询。这样,您只需访问服务器一次。如果你的表是用索引连接的,它应该很快。
【讨论】:
【参考方案6】:在 Oracle 下,您希望利用查询缓存,如果您在顺序处理中有很多小查询,如果最后一个查询将第一个查询从缓存中推出,那就太糟糕了...正好赶上您循环并在下一次传递时再次运行第一个查询(显然使用不同的参数值)。
我们正在使用 Java 存储过程构建 XML 输出文件,并且肯定发现每个单独查询的往返时间都在吞噬我们。我们发现在尽可能少的查询中获取所有数据,然后根据需要将这些值插入 XML DOM 会快得多。
唯一的缺点是 Java 代码不太优雅,因为数据获取现在远离它的使用。但是我们必须在尽可能接近零的时间内生成一个大型的复杂 XML 文件,因此我们必须针对速度进行优化。
【讨论】:
【参考方案7】:但是,在处理合并表时要小心。根据我的经验,虽然在大多数情况下单个连接可能很好,但当涉及合并表时,您可能会遇到奇怪的情况。
【讨论】:
以上是关于我应该使用一个大的 SQL Select 语句还是几个小的 SQL Select 语句?的主要内容,如果未能解决你的问题,请参考以下文章
SQL数据库查询中满足任何一个条件,使用OR还是多条语句效率高?