Sqlserver2005でスクリプトを実行しているのですが、
Select *
From ( Select文A ) TBL
( データ6万件 ) TBL2
Where TBL.Key *= TBL2.Key
を実行したとき、
Select文A … (1) 1000件数で実行したときと
(2) 1005件数で実行したときと
では20秒(1)が遅いのです。
(2)は1秒もかかりません。件数結果が少ないにも関わらず
時間が遅いことはあるのでしょうか??
どちらも遅いということだとわかるんですが…
実行プランをみたのですが、なにがよいのか判断できませんでした。
しかし、早く返ってくる方はハッシュ結合でした…
Where句で日付の範囲を変えるだけでハッシュ結合になる場合とならない場合があるのも疑問でした…
ご存知の方ご教授お願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
一般論として、クエリを分析、実行するオプティマイザはクエリそのものの違い、データ件数の違いだけではなく、
インデックス情報や収集した統計情報も使って最適な実行プランを作成しようとします。
http://technet.microsoft.com/ja-jp/library/cc966 …
また、実行プランはキャッシュされますので、その差が影響する場合もあります。
その意味では、データ量が少し違うだけで別のプランが有利だと「判断する」可能性は当然ながらあります。
(オプティマイザが選択したプランが常に最適というわけではありません)
HashJoinとNested-Loopが本当に唯一の違いなのであれば、質問者さんのこのクエリの実行環境においては、1000件が結合方法を切り替えるボーダーになっている可能性はありますが、それだけが理由なのか、当然ながら開示された情報では圧倒的に情報が不足していますのでコメントすることはできません。
前述の通り、実行プランの選択には多くの要素があることを認識いただくべきだと思います。
回答の程ありがとうございます。
現在HashJoinを考えておりました。
しかし データ6万件 のSQL文の条件がしぼれそうなので
もう少ししぼって外部結合を行ってみます。
今まで、条件(月単位毎に集計を行う為、年月が範囲になります。)が異なってもこのように数十秒もかかることはなかったので悩んでます。
深く調べてみます。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
ストアドプロシージャーでバッ...
-
SQLCMDにて教えていただきたい...
-
バッチからSQLCMDを実行する方法
-
IDENTITY列を持つテーブルへBCP...
-
サーバーと実行端末が違う場合...
-
バッチからメンテナンスプラン...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
SQL文の実行結果の保存・印刷に...
-
.SQLファイルをvbaで実行
-
SQLServer(MSDE) JOBの状態取得...
-
Access2010のマルチコアCPUへの...
-
Accessからストアドプロシジャ...
-
SQLServerのジョブからバッチを...
-
【Oracle】ADOでSELECT * FROM ...
-
JAVA ServletでSQL Serverに接...
-
WHERE句の?
-
UPDATE時のSETの実行順について
-
ユーザー定義関数内でのsp_exec...
-
アクションクエリが実行できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
Excelフィルタ抽出で「検索して...
-
ストアドの速度がクエリの30...
-
ユーザー定義関数内でのsp_exec...
-
SQLCMDにて教えていただきたい...
-
SQLServerのジョブからバッチを...
-
sqlcmdでクエリの実行結果をバ...
-
SQLServer2005のストプロでxp_c...
-
UPDATE時のSETの実行順について
-
SQLサーバーのジョブでのexeフ...
-
アクションクエリが実行できない
-
バッチからSQLCMDを実行する方法
-
サーバーと実行端末が違う場合...
-
静的SQL、動的SQL?
-
バッチからメンテナンスプラン...
-
ストアドプロシージャーでバッ...
-
xp_cmdshellについて
-
100万件レコードdelete
-
ストアドプロシージャでcsvファ...
おすすめ情報