【发布时间】:2014-02-26 09:07:06
【问题描述】:
我发现对于具有相同 where 子句的查询,select count(*) 比 select * 花费的时间要长得多。
有问题的表有大约 220 万条记录(称为 detailtable)。它有一个外键字段链接到另一个表 (maintable)。
此查询大约需要 10-15 秒:
select count(*) from detailtable where maintableid = 999
但这需要一秒钟或更短的时间:
select * from detailtable where maintableid = 999
UPDATE - 要求指定涉及的记录数。现在是 150。
UPDATE 2 以下是使用 EXPLAIN 关键字时的信息。
对于 SELECT COUNT(*),EXTRA 列报告:
Using where; Using index
KEY 和 POSSIBLE KEYS 都具有外键约束作为它们的值。
对于 SELECT * 查询,除了 EXTRA 只是说:
Using Where
UPDATE 3尝试了OPTIMIZE TABLE,但仍然没有任何作用。
【问题讨论】:
-
请考虑将
EXPLAIN的全部输出发布到您的问题中。 -
+ 表模式 + 有多少行(绝对值和百分比)满足给定条件?
-
count查询返回的数字是多少? -
您是通过 Workbench、PHPMyAdmin、其他工具还是使用命令行运行查询?
-
可能是缓冲/非缓冲查询的情况? ODBC 驱动程序或使用它的客户端设置了一个相对较小的缓冲区大小,MySQL 会迅速用首先找到的行填充它,并且在客户端消耗缓冲区并请求更多之前不继续表扫描?您是只测量了
SELECT *的执行,还是还测量了所有 150 条记录的检索?
标签: mysql