Подтвердить что ты не робот

Как создать кластерный индекс при использовании первой миграции кода с Entity Framework и SQL Server

У меня есть MessageModel с атрибутом timestamp, когда было создано сообщение. Я хотел бы сделать кластеризованный индекс этого длинного атрибута. Я надеюсь добиться ускорения запроса при выполнении запроса, чтобы получить все сообщения, более новые, чем определенные временные метки. Значение timestamp никогда не изменяется после создания. В настоящее время у меня есть регулярный индекс для атрибута int Id.

Как добавить кластерный индекс для атрибута моделей, используя Первичный переход Entity Framework в ASP.NET MVC 4.5?

4b9b3361

Ответ 1

UPDATE: EntityFramework 6.1 представил атрибут [Index], который можно использовать для указания индекса в произвольном поле. Пример:

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

Для более старых версий Entity Framework я оставлю свой первоначальный ответ ниже:

К сожалению, EF не обеспечивает значительную поддержку индексов. Лучший способ приблизиться к этому зависит от типа миграций, которые вы делаете. Если вы не используете автоматическую миграцию и хотите добавить индекс в новую таблицу (т.е. У вас есть миграция), вы можете изменить сгенерированный оператор CreateTable в миграции для добавления индексов. Этот метод используется в одном из учебных пособий Entity Framework (поиск индекса для его поиска)

Если вы используете автоматические миграции (или таблица уже существует), вы все равно можете использовать старый стиль SQL для создания вашего индекса - сгенерировать перенос, а затем изменить свой код, чтобы включить простой старый оператор CREATE INDEX.