C#のEntityFrameworkからSQLServer 10を呼び出しており、リクエストにクエリヒントを取得したいと考えています。データベースには、Management Studioで実行されるSQLから通常どおりに動作するインデックスがありますが、Visual StudioのEntityFrameworkを使用してC#からコマンドを呼び出すと、クエリプランナーは既にインデックスが存在する場合にフルスキャンを選択します。
次の形式でデータを要求する動的述語を作成しています。
data.attributeText = data.vegaDB.attributeText.AsExpandable().Where(parentPredicate.Compile()).ToList();
ここで、parentPredicate
は次と同等の動的に生成されます。
(parentID = p1) AND (attributeName = 'name OR ... ')
SQLServerクエリプランの生成元は次のとおりです。
SELECT
[Extent1].[attributeID] AS [attributeID],
[Extent1].[parentID] AS [parentID],
[Extent1].[typeID] AS [typeID],
[Extent1].[attributeName] AS [attributeName],
[Extent1].[attributeData] AS [attributeData]
FROM [dbo].[attributeText] AS [Extent1]
したがって、直接SQL呼び出しが使用する[Extent1]
インデックスを、最初のc#呼び出しでクエリヒントを実行する追加のコマンドに置き換えることは、解決策のように思われます。[IX_parentID]
私は周りを見回しましたが、まだ成功していません。質問を組み立てる方法はありますか?
これが正しい解決策だと思いますか?