Правильный способ управления индексами базы данных с помощью Entity Framework

Я создаю свое приложение с помощью Entity Framework (принцип модели - первый). Я также использую MS SQL Server 2008 для хранения всех данных моего приложения.

После некоторого времени разработки у меня есть следующий код:

public partial class EventInfo
{
    #region Primitive Properties

    public virtual int Id
    {
        get;
        set;
    }

    public virtual string EventName
    {
        get;
        set;
    }

    public virtual string EventKey
    {
        get;
        set;
    }

    public virtual System.DateTime DateStamp
    {
        get;
        set;
    }

    #endregion
}

И дизайнер базы данных Visual Studio создал специальный фрагмент кода sql для сопоставления этого сущность в базе данных:

-- Creating table 'EventInfoSet'
CREATE TABLE [dbo].[EventInfoSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [EventName] nvarchar(max)  NOT NULL,
    [EventKey] nchar(32)  NOT NULL,
    [DateStamp] datetime  NOT NULL
);

И, конечно же, индекс для свойства Id

-- Creating primary key on [Id] in table 'EventInfoSet'
ALTER TABLE [dbo].[EventInfoSet]
ADD CONSTRAINT [PK_EventInfoSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);

EventKey - это строка, и на самом деле я использую ее для хранения хэша md5 (в строковом представлении). Но дело в том, что мой основной код выглядит так:

    int cnt = context.EventInfoSet.Where(e => e.EventKey == eventKey).Count();

и

    int cnt = context.EventInfoSet.Where(e => e.EventKey == eventKey && e.DateStamp >= dateFrom && e.DateStamp < dateTo).Count();

eventKey здесь строковая переменная. Как видите, я часто имею дело со свойством EventKey. Но моя таблица могла содержать огромное количество записей (до 5M). И мне нужно, чтобы этот код работал как можно быстрее. Я не' Найдите любую возможность пометить EventKey как свойство индекса в конструкторе. И я хочу знать:

  1. как я могу ускорить работу? делать Я должен вообще об этом беспокоиться мой код?
  2. есть ли нежный способ заставить разработку .NET среда генерирует поле индекса автоматически?
  3. , если нет нежный способ, и я должен его обновить вручную, как я могу организовать вещи лучше сделать это автоматически?
  4. может быть вы дадите мне ссылку на статья, объясняющая все эти вещи с индексами, потому что мне не хватает знаний здесь.

Спасибо!

6
задан marc_s 22 March 2011 в 06:28
поделиться