1

たとえば、私が持っている場合

CREATE VIEW viewTest1 AS
SELECT col_a, col_b, col_c, COUNT(1)
FROM table_name
GROUP BY col_a, col_b, col_c

SELECT * FROM viewTest1

もう1つは

CREATE VIEW viewTest2 AS
SELECT col_a, col_b, col_c
FROM table_name

SELECT *, COUNT(1) FROM viewTest2
GROUP BY col_a, col_b, col_c

2番目のものはより速く実行されますか?なんで?

私のテスト結果は2番目のものがより速く、私には理解できません。

ありがとうございました

4

4 に答える 4

2

より詳細な分析実行プランについては、SQL SentryPlanExplorerを使用してください

例:

ステートメント1

SELECT * FROM viewTest1

ここに画像の説明を入力してください

ステートメント2

SELECT *, COUNT(1) FROM viewTest2
GROUP BY col_a, col_b, col_c

ここに画像の説明を入力してください

実行プランは、両方のクエリをまったく同じように実行します。したがって、両方のクエリのコストは

この本を読む必要がありますSQLServer実行プラン

于 2012-11-19T09:02:04.090 に答える
2

使用しているデータベースエンジンのオプティマイザによって異なります。一部のデータベースエンジンはクエリ全体を再編成できますが、そうでないものもあります。私の知る限り、Oracleには再編成の動作を制御するパラメータがありました。

したがって、理論的には単一の答えはありません。

于 2012-11-19T09:16:43.887 に答える
1

そのような違いはあり得ません。ただし、コストの詳細については、実行プランを確認できます。

両方のクエリを同じSQLウィンドウに配置CTRL+Lし、実行プランのキーを押すだけです。

于 2012-11-19T04:13:43.680 に答える
1

テーブルに200k行を超えるサンプルデータセットを作成しましたが、実行プランは同じです。

実行計画

于 2012-11-19T10:01:25.297 に答える