【问题标题】:Should I use a more constrained SQL query or handle the result set in code?我应该使用更受约束的 SQL 查询还是在代码中处理结果集?
【发布时间】:2011-11-10 18:36:52
【问题描述】:

我是一个相当新的 PHP 开发人员,但对 T-SQL 有一些很好的经验,所以我完全有能力为我构建一些很好的 SQL 查询。我正在构建一个 PHP 应用程序并多次遇到此问题。

当我遇到需要从 MySQL 数据库中提取数据并通过 PHP 处理输出的问题时,我是否应该简单地“*”出整个结果集并通过 PHP 挑选出我需要的内容? IMO 将尽可能多的工作放在 SQL 中更有意义,但我不知道。

就性能和“最佳实践”而言,通常是最好的;是靠 MySQL 做大部分工作,让 PHP 负责输出还是让 PHP 做大部分工作?

【问题讨论】:

    标签: php mysql performance theory


    【解决方案1】:

    您通常不应该使用通配符来获取所有列。最好只检索您有兴趣使用的列。这对以下方面有影响:

    • 性能:通过仅获取和检索所需数据来减少开销
    • 可维护性:查询获取的内容更加明显。即,如果您在结构中添加额外的列,您可能会获得最初没有预料到的数据。

    【讨论】:

    • 如果您希望架构在未来发生变化,最佳实践是什么?使用 * 时,它将获取所有新字段或不尝试获取在 SQL 查询中明确定义的已删除字段。首先通过信息模式查询获取字段,然后动态地向查询提供字段名称?
    • 我的意思是您希望尽可能明确。如果你重新定义你的表结构,不可避免地你应该改变你的查询。通过使用通配符,您可能会允许不太明显的错误潜入。
    【解决方案2】:

    如果您只不需要表中的所有列,请明确指定您想要的列。这在性能方面更好,更不用说它更具可读性。

    【讨论】:

      【解决方案3】:

      SQL 几乎总是会产生比 PHP 更好的性能,但这实际上取决于正在运行的查询。它越复杂,SQL 就越有可能成为更好的答案。 SQL 是围绕“快速获取正确数据”而构建的,而 PHP 是围绕作为一种通用脚本语言而构建的。

      【讨论】:

      • 请详细说明一个查询必须有多“复杂”才能比 PHP 慢。根据我的经验,PHP 通常比 SQL 稍微。但也许我的查询需要优化或者我使用了太多的连接?.. :S
      • @mmmshuddup MySQL 通常在分组/排序/过滤功能方面总是更快。如果不是这种情况,您可能做错了什么。
      【解决方案4】:

      一般来说,最好的做法是返回特定的列。性能不是一个大问题,除非您正在处理包含 BLOB 的表(还要考虑表可能将来是否有一个),但您可能会发现处理较小的返回对象更容易.

      当然,如果您处于开发模式而不是维护模式,如果您经常添加或删除列,您可能会发现 SELECT * 更可取。

      【讨论】:

      • 我怀疑永远不会存储 BLOB。
      【解决方案5】:

      根据我的经验,收集 * 查询或特定字段查询的访问时间与总体请求时间相比相形见绌,至少如果这是通过网络完成的。

      在我对美国和海外托管网站的 IE 测试中,我通常发现 select fld、fld、fld 和 select * 之间的差异可以忽略不计,除非您有大表行和很多行。

      我个人认为这在某种程度上是基于您的系统、表的大小以及您的表和列是否处于任何变化状态的判断调用。如果我是你,不知道你的系统的大小,我会选择 *,但显然这不是“最佳实践”,但我认为它确实需要基于特定的系统。

      我目前是一个大型 C#、WCF、WPF、SQL 项目的团队成员,他们到处都采用“最佳实践”,而我们所拥有的却是一团糟。在某些情况下,为了遵循最佳实践付出了很多努力,结果是维护它的工作量要大得多。我们有大量的接口以及包装器、适配器、统一体等。现在要做一个小的更改,它涉及 15 到 20 个文件。我意识到这有点离题,但不要仅仅因为它存在就盲目地遵循最佳实践。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多