Я создаю свое приложение с помощью 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. Но моя таблица может содержать огромное количество записей (до 5 миллионов). И мне нужен этот код, чтобы работать как можно быстрее. Я не нашел никакой возможности пометить EventKey как свойство индекса в конструкторе. И я хочу знать:
- как я могу сделать вещи быстрее? делать
Я должен беспокоиться об этом вообще
мой код?
- есть ли мягкий способ
форсировать разработку .NET
среда генерирует индексное поле
автоматически
- если нет
мягкий путь, и я должен обновить его
вручную, как я могу организовать вещи
лучше сделать это автоматически?
- может быть, вы дадите мне ссылку на
статья, объясняющая все эти вещи
с индексами, потому что мои знания не хватает
здесь.
Спасибо!