11

メッセージがMessageModel作成されたときのタイムスタンプ属性があります。この長い属性にクラスター化インデックスを作成したいと思います。特定のタイムスタンプよりも新しいすべてのメッセージを取得するクエリを実行するときに、クエリの高速化を実現したいと考えています。タイムスタンプ値は、作成後に変更されることはありません。現在、intId属性に通常のインデックスがあります。

ASP.NET MVC 4.5 で Entity Framework コード ファースト移行を使用して、モデル属性にクラスター化インデックスを追加するにはどうすればよいですか?

4

1 に答える 1

24

UPDATE : EntityFramework 6.1 では[Index]、任意のフィールドのインデックスを指定するために使用できる属性が導入されました。例:

public class MessageModel 
{
    [Index(IsClustered = true, IsUnique = false)]
    public long Timestamp { get; set; }
}

古いバージョンの Entity Framework については、元の回答を以下に残します。

残念ながら、EFは実際にはインデックスをあまりサポートしていません。これにアプローチする最善の方法は、実行している移行の種類によって異なります。自動移行を使用しておらず、新しいテーブル (つまり、移行対象のテーブル) にインデックスを追加する場合は、移行で生成された CreateTable ステートメントを変更してインデックスを追加できます。この手法は、Entity Framework チュートリアルの 1 つで使用されています (Index を検索して見つけてください)。

自動移行を使用している(またはテーブルが既に存在する)場合でも、古いスタイルの SQL を使用してインデックスを作成できます。移行を生成してから、コードを変更してプレーンな古いCREATE INDEXステートメントを含めます。

于 2013-04-27T16:42:46.087 に答える