1

新しい計算列を使用してデータをフィルタリング、集計、および順序付けする場合、どのクエリがより効率的であるかを誰かが知ることができますか? ネストされた選択を使用するもの、または1つのselect句で式を複製するものは? データベース指定ですか?

クエリ 1:

SELECT count(*), (age - 18) AS newcol FROM qmao_person WHERE (age - 18) > 0 GROUP BY (age - 18) ORDER BY (age - 18) DESC;

クエリ2:</p>

SELECT count(*), s1.newcol FROM (SELECT (age - 18) AS newcol FROM qmao_person) s1 WHERE s1.newcol > 0 GROUP BY s1.newcol ORDER BY s1.newcol DESC;

ところで、問題は、クエリを最適化する方法ではなく、どのクエリがより効率的かということです。

4

2 に答える 2

4

このクエリは同じ結果を生成し、両方を打ち負かします。

SELECT
    count(*),
    (age - 18) AS newcol
FROM qmao_person
WHERE age > 18
GROUP BY age
ORDER BY age DESC

しかし、一般的に、あなたの質問への回答はベンダー固有のものです。共通の式を除外したり、サブセレクトを結合に変換したりするなど、ベンダーが高度な最適化を使用する場合、結果が同じになる可能性が非常に高くなります。

とはいえ、今のように最適化できなかったとしても、あなたの最初のクエリを好むでしょう。

于 2013-02-08T09:11:21.313 に答える
2

違いを確認するには、2 つのクエリの実行を確認する必要があります。サーバーがそれらをどのように最適化するかによって異なります。例: 実行計画

于 2013-02-08T09:08:18.520 に答える