Php MySQL计数与选择行性能

Php MySQL计数与选择行性能,php,mysql,performance,count,Php,Mysql,Performance,Count,我有一个三列的小表,使用PHP 表(id unsigned int(10)、gameid unsigned int(10)、userid unsigned int(10))-id、gameid和userid被索引 在某个时刻(当玩家加入游戏时),系统将检查游戏中是否已经有100名玩家,如果已经有,系统将检索所有行并对其执行一些操作,最后这些行将被删除 选择查询: SELECT * FROM table WHERE gameid = 1 ORDER BY id ASC LIMIT 100 计数查

我有一个三列的小表,使用PHP

表(id unsigned int(10)、gameid unsigned int(10)、userid unsigned int(10))-id、gameid和userid被索引

在某个时刻(当玩家加入游戏时),系统将检查游戏中是否已经有100名玩家,如果已经有,系统将检索所有行并对其执行一些操作,最后这些行将被删除

选择查询:

SELECT * FROM table WHERE gameid = 1 ORDER BY id ASC LIMIT 100
计数查询:

SELECT COUNT(*) as rows FROM table WHERE gameid = 1 LIMIT 100
删除查询:

DELETE FROM table WHERE gameid = 1 ORDER BY id ASC LIMIT 100
我的问题是关于性能和速度,什么会更好:

方法1(3项查询)

  • 执行计数查询并检查表中有多少行
  • 如果行>=100,请执行以下操作:
    • 执行SELECT查询并处理数据
    • 执行删除查询
方法2(2查询)

  • 执行选择查询
  • 如果计数(行)>=100 do:
    • 处理数据
    • 执行删除查询
什么方法更适合使用

谢谢

microtime(真)
是你的PHP朋友

如果有一个以
gameid
开头的索引,“方法1”可能会更快,因为它可以在索引中进行
计数(*)

另一方面,有两件事对它不利:

  • 3个查询通常比2个慢
  • 如果有超过100行的
    gameid=1
    (情况似乎并非如此),则需要花费更多的时间进行完整计数。“进近2”在100时停止

我认为真正的答案是“这两个查询之间的差异不够重要。

自己试试看,看哪一个需要更长的时间。是的,我做了一点测试,计数本身比选择查询慢,没有多大意义,但差异很大。计数查询需要0.00xxx执行,选择需要0.000xxx执行,因此计数+选择将需要比仅选择多3倍的时间。很可能是一个假警报——执行
Count(*)
可能会将各种块带到缓存(RAM)中。然后,另一个
SELECT
不需要加载这些块。或者,您打开了查询缓存,并且最近刚刚执行了
SELECT