Mysql中的优化/ COUNT(*)

时间:2012-11-11 22:04:31

标签: mysql

我有一个有效的查询

$query_list_records = "SELECT COUNT(*)
                         FROM (SELECT comment_id from myl_r_comments
                                WHERE release_id=? LIMIT ? OFFSET ?) A";

这会对第二个SELECT中的所有行进行COUNT。

但出于优化目的, 为什么以下行不起作用?

$query_list_records = "SELECT COUNT(*)
                         FROM myl_r_comments
                        WHERE release_id=? LIMIT ? OFFSET ?";

我认为,对于大量行,仅返回COUNT值比返回大量行(选择一列)然后计算它们更好。

让我知道你的想法。

1 个答案:

答案 0 :(得分:4)

在第一个版本中,应用LIMIT,然后COUNT(*)获取结果:例如子查询返回 X 记录,这些记录仅限于 Y ,外部查询中的COUNT(*)返回 Y

在第二个版本中,所有记录都会COUNT(*),然后应用LIMIT(但只有一个,聚合记录要限制):所以 X 是唯一返回的记录(但OFFSET可能会导致它从结果集中排除。)

你可以这样做:

SELECT LEAST(GREATEST(COUNT(*) - ?, 0), ?) from myl_r_comments WHERE release_id=?