Я создаю свое приложение с помощью 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 как свойство индекса в конструкторе. И я хочу знать:
Спасибо!