0

機能するクエリがあります

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

これは、2 番目の SELECT からすべての行を COUNT します。

しかし、最適化のために、次の行が機能しないのはなぜですか?

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

多数の行の場合、多数の行 (1 つの列が選択されている) を返してからそれらをカウントするよりも、COUNT 値のみを返す方が優れていると思います。

どう考えているか教えてください。

4

1 に答える 1

4

最初のバージョンでは、LIMITが適用さCOUNT(*)れてから、結果が取得されます。たとえば、サブクエリはYに制限されたXレコードを返し、外部クエリではYを返します。COUNT(*)

2番目のバージョンではCOUNT(*)、すべてのレコードのが取得されてからLIMIT適用されます(ただし、制限する集約レコードは1つだけです)。したがって、返されるレコードはXOFFSETだけです(ただし、結果セットから除外される可能性があります)。

代わりに次のことができます。

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