4

我想知道在 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 中计算排名。

4

6 回答 6

2

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

于 2009-06-05T18:25:57.257 回答
2

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

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

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

于 2009-06-05T18:08:49.343 回答
0

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

于 2009-06-05T18:23:04.453 回答
0

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

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

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

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

我的两分钱。

于 2009-06-05T18:48:36.777 回答
0

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

于 2009-06-05T19:01:10.763 回答