我想知道在MySQL或PHP或Python等服务器语言中处理数据是否更快。我确信由于索引,缓存等原因,ORDER等本机函数在MySQL中会更快,但实际上计算排名(包括将多个条目返回为具有相同排名的联系):
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中的排名。
答案 0 :(得分:2)
一般来说,“我应该在数据库中处理数据,还是在Web服务器上处理问题”的答案是“它取决于”。
SELECT *
检索表中的每一行,并在Web服务器上迭代它们以选择x = 3的那一行,当你只能SELECT * WHERE x = 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)