転送を最適化した存在はありません

関連するクエリは、時々フィルターを生産する場合有するのは、変換方法を見てみましょう。

1.データの準備

DROPテーブル学生。

TABLE学生のCREATE

(StuName VARCHAR2(10)NOT NULL、

 SClass VARCHAR2(10)、

 被験者VARCHAR2(10)、

 チームVARCHAR2(10)、

 )INTEGERスコア。

 

スチューデント値への挿入( 'A1'、 '1'、 '数学'、 'A'、60);

;スチューデント値( 'A2'、 '1'、 '数学'、 'B'、90)への挿入

スチューデント値への挿入( 'A3'、 '1'、 '英語'、 'A'、80);

;スチューデント値( 'A4'、 '1'、 '英語'、 'B'、40)への挿入

学生値( 'A5'、 '2'、 '数学'、 'A'、60)への挿入。

;スチューデント値( 'A6'、 '2'、 '数学'、 'B'、60)への挿入

スチューデント値に挿入( 'A7'、 '2'、 '英語'、 'B'、80);

スチューデント値に挿入( 'A8'、 '2'、 '英語'、 'B'、100);

コミット;

 

2.検索要求

対象はすべてのチーム平均クラス名の平均値よりも大きい場合、各クラスを取得し、アカウント名、平均アカウント

すなわち、図中の黄色のマークされた部分。

3.SQLの最適化

s.SClass、s.Subject、AVG(s.Score)を選択

学生のから

s.SClass、s.Subjectによってグループ

平均を有する(s.score)

    >すべての(選択AVG(s1.Score)

            学生S1から

               どこs.SClass = s1.SClass

               s1.Teamによって基);

ゴーンフィルタフィルタの接続部を有します。

tmpのようで

(s.SClassを選択し、

        s.Subject、

              avg_Subjectとして平均(s.Score)上(s.SClass、s.Subjectによってパーティション)

              avg_Teamとして平均(s.score)上(s.SClass、s.Teamによってパーティション)

 学生秒から)

明確なt.SClass、t.Subject、t.avg_Subjectを選択

TMPトンから

存在する(選択していないところ1

                  TMP t2から

                              どこt.SClass = t2.SClass

                                そしてt.avg_Subject <= t2.avg_Team)。

お問い合わせは、ハッシュ接続を歩いた後、クエリを開始しました。

集計操作が大幅にデータの量を減らすことができればここで、それはを続行しないことをお勧めします。具体的には検証されません。

发布了51 篇原创文章 · 获赞 4 · 访问量 4221

おすすめ

転載: blog.csdn.net/songjian1104/article/details/103104883