我应该使用一个大的 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 页面。

有没有更好

1 SELECT 查询与 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 UDF 和查询优化 [重复]

进入PLSQL的命令窗口,输入SQL语句后,应该如何执行?

SQL数据库查询中满足任何一个条件,使用OR还是多条语句效率高?

sql语句要select某字段不重复的数据应该如何写?

SQL: 一般情况按年分组,特殊年份按指定日期分组,SELECT语句怎么写?

在mysql数据库里用sql语句select数据,是select * 速度快,还是select指定字段速度快?