はクエリです:クエリは1つのデータセットでは遅く実行されますが、別の大きなデータセットではより早く実行されます。 MSSQLサーバー。異なる実行計画。どうして?ここ
以下select nd1.ansos_id
from nursdate nd1
where nd1.division_id = 2
and nd1.unit_id = 19
and nd1.nursdate_start_date =
(select min(nd2.nursdate_start_date)
from nursdate nd2
where nd2.ansos_id = nd1.ansos_id
and nd2.nursdate_start_date >= all
(select nd3.nursdate_start_date
from nursdate nd3
where nd3.ansos_id = nd1.ANSOS_ID
and nd3.nursdate_start_date <= '2017-08-13 00:00:00'))
は最新で
- 統計の両方のデータセットについても同様です。
- インデックスの最適化
- 一般的な両方のデータセットのプロパティは同じです。
- また、2つのデータセットには、ほぼ同じ量のデータがあります。実際に速く1は、より多くのデータ
を持っている今では1セットで実行するために〜8秒かかりますが、別のデータセットの< 1秒。 ここ遅いデータセット内
- 「実行数」&「行の実際の数は」2つのデータセットとの間の実行計画の差であること天文学高い
- 速く一つは、追加ノード「インデックススプールを有しています「
スクリーンショット#1:1つのデータセットで同じクエリ、遅い実行計画
スクリーンショット#2:同じクエリ、SPEE別のデータセットで実行計画を実行する
この問題を解決する方法は?第1のデータセットで速く動くようにするにはどうすればよいですか? ありがとう!
[EDIT]遅い実行計画(全体「nursdate」テーブルのみ99Kの行を有することに留意されたい) https://www.brentozar.com/pastetheplan/?id=r1ZFFuNt-
高速実行計画(全体「nursdate」表は、333Kの行を有することに留意されたいそれです。何とか速い) https://www.brentozar.com/pastetheplan/?id=rJYMc_EKb
ここで[EDIT]は、データボリューム上のいくつかの情報です。 「mmt」のデータは少ないデータですが、遅く実行されます
--mmt cnt: 99347
select count(*)
from mmt_sqa_v60.mmtsqav60.nursdate nd1
--heo cnt: 333275
select count(*)
from heo_sqa_v60_2k12.heosqav602k12.nursdate nd1
--mmt cnt: 2403
select count(*)
from mmt_sqa_v60.mmtsqav60.nursdate nd1
where nd1.division_id = 2
and nd1.unit_id = 19
and nd1.nursdate_start_date <= '2017-08-13 00:00:00'
--heo cnt: 5537
select count(*)
from heo_sqa_v60_2k12.heosqav602k12.nursdate nd1
where nd1.division_id = 1
and nd1.unit_id = 20
and nd1.nursdate_start_date <= '2017-08-13 00:00:00'
このツールを使用して、両方の実行計画を投稿してください:https://www.brentozar.com/pastetheplan/ – Eli
2つのデータセットは何ですか?彼らは別のテーブルを使用する必要がありますshould notあなたは2つの異なるクエリを持っていますか?クエリで異なるパラメータを使用する場合は、比較できるように2つのクエリも必要です。 –
あなたの質問に対する答えはここにあります。[「実際の行数」と「実行回数」は天文学的に高いです。 410万行9k行データ量の違いの大きさについて話しているため、実行計画は異なる可能性があります。 –