我有一个有效的查询
$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值比返回大量行(选择一列)然后计算它们更好。
让我知道你的想法。
答案 0 :(得分:4)
在第一个版本中,应用LIMIT
,然后COUNT(*)
获取结果:例如子查询返回 X 记录,这些记录仅限于 Y ,外部查询中的COUNT(*)
返回 Y 。
在第二个版本中,所有记录都会COUNT(*)
,然后应用LIMIT
(但只有一个,聚合记录要限制):所以 X 是唯一返回的记录(但OFFSET
可能会导致它从结果集中排除。)
你可以这样做:
SELECT LEAST(GREATEST(COUNT(*) - ?, 0), ?) from myl_r_comments WHERE release_id=?