0

我有一个有效的查询

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

这会从第二个 SELECT 中计算所有行。

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

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

我认为,对于很多行,只返回 COUNT 值比返回很多行(选择一列)然后计算它们要好。

让我知道你的想法。

4

1 回答 1

4

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

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

你可以改为:

SELECT LEAST(GREATEST(COUNT(*) - ?, 0), ?) from myl_r_comments WHERE release_id=?
于 2012-11-11T22:06:05.817 回答