【问题标题】:MySQL vs Web Server for processing data用于处理数据的 MySQL 与 Web 服务器
【发布时间】:2010-10-31 17:33:59
【问题描述】:

我想知道在 MySQL 或 PHP 或 Python 等服务器语言中处理数据是否更快。我敢肯定,由于索引、缓存等原因,像 ORDER 这样的原生函数在 MySQL 中会更快,但实际上是在计算排名(包括将多个条目返回为具有相同排名的关系):

示例 SQL

SELECT TORCH_ID,
    distance AS thisscore,
    (SELECT COUNT(distinct(distance))+1 FROM torch_info WHERE distance > thisscore) AS rank
    FROM torch_info ORDER BY rank

服务器

...而不是仅仅做一个SELECT TORCH_ID FROM torch_info ORDER BY score DESC,然后在 Web 服务器上计算 PHP 中的排名。

【问题讨论】:

    标签: php mysql optimization query-optimization


    【解决方案1】:

    对于大多数非复杂计算,MySQL 可能会更快。但是,90% 的时间数据库服务器是瓶颈,所以你真的想通过这些计算来增加你的数据库吗?我本人宁愿将它们放在网络/应用程序服务器上以平衡负载,但这是您的决定。

    【讨论】:

      【解决方案2】:

      一般来说,“我应该在数据库中处理数据还是在 Web 服务器上处理数据”的答案是“这取决于”。

      1. 添加另一个 Web 服务器很容易。添加另一个数据库服务器更难。如果您可以减轻数据库的负担,那就太好了。
      2. 如果数据处理的输出远小于所需的输入,则可以通过在数据库中进行处理来避免大量数据传输开销。举个简单的例子,SELECT * 是愚蠢的,检索表中的每一行,然后在 Web 服务器上遍历它们以选择 x = 3 的行,而你可以只使用SELECT * WHERE x = 3
      3. 正如您所指出的,数据库已针对其数据的操作、使用索引等进行了优化。

      【讨论】:

        【解决方案3】:

        计数的速度取决于您使用的数据库存储引擎和表的大小。虽然我怀疑在 mySQL 中完成的几乎所有计数和排名都会比将相同的数据拉入 PHP 内存并执行相同的操作更快。

        【讨论】:

        • 正如我在原始帖子中所说,COUNT 肯定会更快,因为它是一个原生 SQL 函数,我猜数据库将被优化以执行它。但是,排名不是本机功能。我的问题是问这些非本机函数在 MySQL 或专门为处理列表而构建的诸如 python 之类的语言中是否更快。
        【解决方案4】:

        排名基于计数、顺序。所以如果你能更快地完成这些功能,那么排名显然会更快。

        【讨论】:

          【解决方案5】:

          您的问题很大一部分取决于您设置的主键和索引。 假设 torchID 被正确索引...

          你会发现 mySQL 比服务器端代码更快。

          您可能需要考虑的另一个问题是调用此 SQL 的频率。您可能会发现创建一个排名列并在每个跟踪记录进入时对其进行更新会更容易。这将导致对您的数据库产生很多次要命中,而不是对您的数据库产生一些“较重”的命中。

          假设您有 10,000 条记录,每天有 1000 位用户点击此查询,每天有 100 位用户输入新的跟踪记录。我宁愿让数据库进行 100 次更新,其中 10% 的更新命中每条记录 (9,999),然后让排名查询每天命中 1,000 次。

          我的两分钱。

          【讨论】:

            【解决方案6】:

            如果您的测试是运行单个查询而不是发布事务,那么我建议您在 ODBC dsn 上使用 JDBC 驱动程序,因为您将获得 2-3 倍的性能提升。 (我假设您在测试中使用 odbc dsn)

            【讨论】:

              猜你喜欢
              • 2014-08-18
              • 2012-03-11
              • 2012-07-24
              • 1970-01-01
              • 2011-10-25
              • 2019-11-25
              • 1970-01-01
              • 1970-01-01
              • 2015-08-05
              相关资源
              最近更新 更多