none
実行計画がおかしい RRS feed

  • 質問

  • SQL Server 2008 R2であるUPDATE文を実行しています。そのUPDATE文では、ある箇所でExists句を3段使用しています。(詳細は明かせません。すみません。)そのUPDATE文の推定実行プランを表示すると、1段目から3段目のExists句で、Clustered Index Seek + Sortが使用されているのですが、その推定実行件数は200件程度で推定実行回数は1回です。で実際の実行プランを表示すると、1段目から2段目のExists句で、Clustered Index Seek + Sortが使用され、その実際の実行件数は3566件程度で実際の実行回数は1回です。ただ、3段目のExists句では、Clustered Index Seek + Sortが使用され、その実際の実行件数は12716356件(3566×3566)で実際の実行回数は3566回となっています。

    そこで質問なんですが、推定と実際で実行行数がずれるのはわかるのですが、実行回数が推定と実際で1回と3566回と大きくずれる理由はどういう理由からでしょうか?3段目(アンダーライン部分のExists句)だけ、実行回数が実行行数と同じになるのは、どう考えても理解できません。1回で済むはずです。この部分が原因でやたら処理が遅くなります。(4分程度かかる)

    ちなみに、統計情報は最新の値を全件サンプルして取得しています。

    補足:問題となるSQLの概要は以下のようなものです。

    UPDATE

        A
    SET
        a = AA.a
    from
        A
    left outer join
        (select
              a,b
         from
              A
         where
              exists(select
                         *
                     from
                         (select
                               a,b
                          from
                               A AB
                          where
                               exists(select
                                          a,b
                                      from
                                          (select
                                               a,b
                                           from
                                               A B
                                           where
                                               exists(select
                                                          *
                                                      from
                                                          A C
                                                      where C.b = B.b)
                                          ) AA
                                       where
                                           AA.b = AB.b)) AC
                     where AC.b = a.b)) AA
    where
        A.b = AA.b


    • 編集済み べる1 2016年10月17日 17:38
    2016年10月17日 17:32