たとえば、クエリがあります。
var personList = context.People;
People は、2 つの結合と約 2500 行を含むビューで、実行に約 10 秒かかります。推定実行計画を見ると、ネストされたループが使用されていることがわかります。
今私がこれを行うと:
var personList = context.People.Where(r => r.Surname.Length > -1);
実行時間は 1 秒未満で、実行計画はハッシュ結合を使用しています。
生成された SQL に「OPTION (HASH JOIN)」を追加すると、パフォーマンスが向上するという望ましい効果があります。
だから私の質問は...
ハッシュ結合を使用するクエリを取得するにはどうすればよいですか? ビューに追加できません(試してみましたが、エラーです)。これを強制するEF4のオプションはありますか? または、ストアドプロシージャに入れる必要がありますか?
レビュー
SELECT dbo.DecisionResults.ID, dbo.DecisionResults.UserID, dbo.DecisionResults.HasAgreed, dbo.DecisionResults.Comment,
dbo.DecisionResults.DateResponded, Person_1.Forename, Person_1.Surname, Site_1.Name, ISNULL(dbo.DecisionResults.StaffID, - 999)
AS StaffID
FROM dbo.DecisionResults INNER JOIN
Server2.DB2.dbo.Person AS Person_1 ON Person_1.StaffID = dbo.DecisionResults.StaffID INNER JOIN
Server2.DB2.dbo.Site AS Site_1 ON Person_1.SiteID = Site_1.SiteID
ORDER BY Person_1.Surname
最後に OPTION(HASH JOIN) を追加すると、次のエラーが発生します。
「クエリ ヒント」は、このクエリ タイプでは使用できません。
ただし、そのスクリプトをクエリとして実行すると問題なく動作します。