問題タブ [query-hints]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - OPTION (RECOMPILE) は常に高速です。なんで?
OPTION (RECOMPILE)
クエリに追加すると 0.5 秒で実行され、それを省略するとクエリに 5 分以上かかるという奇妙な状況に遭遇しました。
これは、Query Analyzer または C# プログラムからSqlCommand.ExecuteReader()
. 電話する(または電話しない)DBCC FREEPROCCACHE
かDBCC dropcleanbuffers
、違いはありません。クエリの結果は、クエリがある場合は常に瞬時に返され、クエリがOPTION (RECOMPILE)
ない場合は 5 分以上返されます。[このテストのために] クエリは常に同じパラメーターで呼び出されます。
SQL Server 2008 を使用しています。
私は SQL を書くことにかなり慣れていますが、これまでOPTION
クエリでコマンドを使用したことがなく、このフォーラムの投稿をスキャンするまでプラン キャッシュの概念全体に慣れていませんでした。投稿からの私の理解は、それOPTION (RECOMPILE)
は高価な操作であるということです。どうやら、クエリの新しいルックアップ戦略を作成します。では、なぜ を省略した後続のクエリOPTION (RECOMPILE)
が非常に遅いのでしょうか? 後続のクエリは、再コンパイルのヒントを含む前回の呼び出しで計算されたルックアップ戦略を利用するべきではありませんか?
呼び出しごとに再コンパイルのヒントが必要なクエリがあるのは非常に珍しいことですか?
初心者レベルの質問で申し訳ありませんが、これについては頭も尻もわかりません。
更新: クエリを投稿するように求められました...
Query Analyzer からテストを実行するときは、次の行を先頭に追加します。
C# プログラムから呼び出すと、パラメーターはSqlCommand.Parameters
プロパティを介して渡されます。
この議論の目的のために、パラメーターは決して変化しないと仮定できるため、最適ではないパラメーターの臭いが原因である可能性を排除できます。
sql-server - FOR XML でのクエリ ヒントの使用
「FOR XML」ステートメントでクエリヒントを使用する方法を知っている人はいますか? 私の(サブ)クエリは次のようになります。
追加すると
構文エラーが発生します...
どうも
sql-server - クエリオプティマイザーは、ロールアップを過ぎて述語をプッシュできませんか? HINTも効かない
これはスキーマです:
そして、これは私が理解しているように、SQLオプティマイザーには複雑すぎるSQLです。
SQLFIDDLE: http://sqlfiddle.com/#!6/aa74e/11 (自動生成データ付き)
私が期待すること:実行計画には、 x.PaymentPartId のインデックス シークが含まれている必要があります。なんで?このクエリは次と同等であるためです。
...そして最後のクエリはインデックス シークを使用します。
しかし、SQL Optimizer はインデックスの使用を拒否するだけでなく、すべてのヒントを無視します (sqlfiddle で期限切れにすることをお勧めします。これは非常に興味深いことです)。
そこで問題は、SQL Server Optimizer に強制的にインデックス シークを使用させることは不可能だというのは正しいでしょうか? ロールアップは、SQLオプティマイザーの「最適化フレーム」を2つの部分に分割するものであり、クエリ全体を最適化することを不可能にしているようです。
PSこの「プログラミング以外の質問」を締めくくることに投票した人は、オプティマイザのヒントを入力してみてください (sqlfiddle はプログラミング スキルをテストする準備ができています!)。
sql-server - テーブル値関数を呼び出すときにクエリ ヒントを追加する
option (recompile)
エンティティ フレームワークからテーブル値関数を呼び出していますが、選択した実行プランが最適ではないため、テーブル値関数を追加できる必要があります。SQL Server Management Studio でクエリを実行すると、次のようになります。
EF から、そのヒントを追加する方法はありません。EF 部分は次のようになります。
私はこの質問を見ました:
エンティティ フレームワークでパラメーター スニッフィングやクエリ ヒントを制御するにはどうすればよいですか?
しかし、それは古く、承認されたソリューションは、エンティティ フレームワークを使用して提案されたソリューション (プラン ガイドを使用)を実際に実装する方法について十分な情報を提供していません。それが唯一の解決策である場合、エンティティ フレームワークでプラン ガイドを使用するにはどうすればよいでしょうか。