mysql - 对于相同的 "where"子句,select count(*) 比 select * 花费的时间长得多?

标签 mysql

我发现对于具有相同 where 子句的查询,select count(*)select * 花费的时间要长得多。

有问题的表有大约 220 万条记录(称之为 detailtable)。它有一个外键字段链接到另一个表(ma​​intable)。

此查询大约需要 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

KEYPOSSIBLE 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/

相关文章:

c# - 优化 .NET Web 服务数据库记录选择

mysql - MySQL SELECT 语句、多个表的帮助

PHP ID 不通过 url

javascript - 在没有babel的情况下要求 Electron 文件

php - 如何在一个 SQL 语句中从当前行的前一行获取 "use"mysql 单元格,并显示包括第一行在内的所有行?

php - 验证记录存在的数据库条件

mysql - 在 MySQL 中使用 DATE_ADD 后选择列值的日期

mysql - 在 WordPress 中建立数据库连接时出错,或者我们无法联系本地主机上的数据库服务器

mysql - 将小数数据类型转换为小数点后两位时遇到问题

当长度不同时Mysql不使用索引