我发现对于具有相同 where 子句的查询,select count(*) 比 select * 花费的时间要长得多。
有问题的表有大约 220 万条记录(称之为 detailtable)。它有一个外键字段链接到另一个表(maintable)。
此查询大约需要 10-15 秒:
select count(*) from detailtable where maintableid = 999
但这需要一秒钟或更少的时间:
select * from detailtable where maintableid = 999
UPDATE - 要求指定涉及的记录数。是 150。
更新 2 以下是使用 EXPLAIN 关键字时的信息。
对于 SELECT COUNT(*),EXTRA 列报告:
Using where; Using index
KEY 和 POSSIBLE KEYS 都将外键约束作为它们的值。
对于 SELECT * 查询,除了 EXTRA 只是说:
Using Where
UPDATE 3 尝试了OPTIMIZE TABLE,但仍然没有什么不同。
最佳答案
肯定的
select count(*)
应该比
快select *
count(*)、count(field)、count(primary key)、count(any)都是一样的。
您的 explain
清楚地表明优化器以某种方式使用 count(*)
的索引,而不是其他使外键成为延迟的主要原因。
消除外键。
关于mysql - 对于相同的 "where"子句,select count(*) 比 select * 花费的时间长得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517886/