MySQL COUNT与SELECT行性能

时间:2015-06-19 20:44:10

标签: php mysql performance count

我有一个包含三列并使用PHP的小表。

TABLE(id unsigned int(10),gameid unsigned int(10),userid unsigned int(10)) - id,gameid和userid被编入索引。

在某些时候(当玩家加入游戏时)系统将检查游戏中是否已经有100个玩家,如果是,它会检索所有行并对它们执行一些操作,最后行将被删除。< / p>

SELECT Query:

SELECT * FROM table WHERE gameid = 1 ORDER BY id ASC LIMIT 100

COUNT个查询:

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个查询)

  • 执行COUNT查询并检查表中的行数
  • 如果行&gt; = 100,请执行以下操作:
    • 执行SELECT查询并处理数据
    • 执行DELETE查询

方法2(2查询)

  • 执行SELECT查询
  • 如果count(rows)&gt; = 100,请执行以下操作:
    • 处理数据
    • 执行DELETE查询

哪种方法更好用?

由于

1 个答案:

答案 0 :(得分:2)

microtime(true)是您的PHP朋友。

如果索引以gameid开头,则“方法1”可能更快,因为它可以在索引中执行COUNT(*)

另一方面,有两件事情与之相反:

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

我认为真正的答案是“两者之间没有足够的区别。”