MySQL vs Web Server用于处理数据

时间:2009-06-05 18:05:05

标签: php mysql optimization query-optimization

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

6 个答案:

答案 0 :(得分:2)

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

  1. 添加其他网络服务器很容易。添加另一个数据库服务器更加困难。如果您可以从数据库中删除负载,那就可以了。
  2. 如果数据处理的输出远小于所需的输入,则可以通过在数据库中进行处理来避免大量的数据传输开销。作为一个简单的例子,SELECT *检索表中的每一行,并在Web服务器上迭代它们以选择x = 3的那一行,当你只能SELECT * WHERE x = 3时,它是愚蠢的。
  3. 正如您所指出的,数据库已针对其数据进行了优化,使用索引等

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

排名基于计数,订单。因此,如果你能更快地完成这些功能,那么排名显然会更快。

答案 4 :(得分:0)

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

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

您可能想要做的另一个考虑因素是调用此SQL的频率。您可能会发现创建排名列并在每个跟踪记录进入时更新更容易。这将导致数据库出现大量轻微命中,而不是数据库的“更重”命中。

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

我的两分钱。

答案 5 :(得分:0)

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