MySQL COUNT 对比 SELECT 行性能
MySQL COUNT vs SELECT rows performance
我有一个小的 table 三列并使用 PHP。
TABLE (id unsigned int(10), gameid unsigned int(10), userid unsigned int(10)) - id, gameid 和 userid 被索引。
在某些时候(当玩家加入游戏时)系统将检查游戏中是否已经有 100 名玩家,如果有,它会检索所有行并对它们执行一些操作,最后这些行将被删除.
SELECT 查询:
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 个查询并检查 table
中有多少行
- 如果行数 >= 100,则执行:
- 执行SELECT查询并处理数据
- 执行删除查询
方法 2(2 查询)
- 执行SELECT查询
- 如果 count(rows) >= 100 做:
- 处理数据
- 执行删除查询
哪种方法更好用?
谢谢
microtime(true)
是你的 PHP 朋友。
如果有一个以 gameid
开头的索引,"Approach 1" 可能 会更快,因为它可以在索引中执行 COUNT(*)
.
另一方面,有两点不利:
- 3 查询通常比 2 慢。
- 如果
gameid = 1
的行数超过 100 行(似乎并非如此),则需要花费更多时间进行完整计数。 "Approach 2" 停在 100。
我认为真正的答案是“两者之间没有足够的区别。
我有一个小的 table 三列并使用 PHP。
TABLE (id unsigned int(10), gameid unsigned int(10), userid unsigned int(10)) - id, gameid 和 userid 被索引。
在某些时候(当玩家加入游戏时)系统将检查游戏中是否已经有 100 名玩家,如果有,它会检索所有行并对它们执行一些操作,最后这些行将被删除.
SELECT 查询:
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 个查询并检查 table 中有多少行
- 如果行数 >= 100,则执行:
- 执行SELECT查询并处理数据
- 执行删除查询
方法 2(2 查询)
- 执行SELECT查询
- 如果 count(rows) >= 100 做:
- 处理数据
- 执行删除查询
哪种方法更好用?
谢谢
microtime(true)
是你的 PHP 朋友。
如果有一个以 gameid
开头的索引,"Approach 1" 可能 会更快,因为它可以在索引中执行 COUNT(*)
.
另一方面,有两点不利:
- 3 查询通常比 2 慢。
- 如果
gameid = 1
的行数超过 100 行(似乎并非如此),则需要花费更多时间进行完整计数。 "Approach 2" 停在 100。
我认为真正的答案是“两者之间没有足够的区别。