Я делаю простой запрос в базе данных, поиск по двум столбцам. У меня есть индекс в столбцах. Когда я выполняю поиск в SQL Server Management Studio, требуется всего несколько миллисекунд (всегда меньше 10). Когда я делаю тот же запрос в NHibernate, он занимает более 30 секунд. Я профилировал запрос, и сгенерированный SQL в порядке. Я использую NHibernate Profiler, и когда я выбираю «показать результаты запроса» в NHibernate Profiler, для получения результатов требуется меньше секунды. Куда я отсюда отлажу эту отладку?Как отлаживать медленный NHibernate Выберите запрос?
EDIT: Итак, я решил сделать это с помощью session.CreateSQLQuery(), и он работает очень быстро. Почему это будет быстрее, чем другой метод?
EDIT: Кажется, что использование параметров запроса является проблемой. Я создал запрос HQL без параметров, и все было нормально. Как только я добавил именованные параметры, время выполнения запроса резко возросло.
ТАБЛИЦА SCHEMA:
CREATE TABLE [dbo].[CRDefendant](
[Id] [int] NOT NULL,
[FirstName] [varchar](30) NULL,
[LastName] [varchar](30) NULL,
[MiddleName] [varchar](30) NULL,
[Race] [char](1) NULL,
[Sex] [char](1) NULL,
[BirthDate] [char](10) NULL,
[Social] [int] NULL,
[BadData] [varchar](50) NULL,
CONSTRAINT [PK__CRDefend__3214EC073B95D2F1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [GROUP3]
) ON [GROUP3]
GO
QUERY:
SELECT this_.Id as Id16_0_, this_.FirstName as FirstName16_0_, this_.LastName as LastName16_0_, this_.MiddleName as MiddleName16_0_, this_.Race as Race16_0_, this_.Sex as Sex16_0_, this_.BirthDate as BirthDate16_0_, this_.Social as Social16_0_, this_.BadData as BadData16_0_ FROM [CRDefendant] this_ WHERE this_.LastName = @p0 and this_.FirstName like @p1
ИНДЕКС:
CREATE INDEX IX_CRDefendant_Name_DOB
ON CRDefendant (LastName ASC, FirstName ASC, BirthDate ASC)
INCLUDE (MiddleName, Race, Sex, Social)
ON GROUP3
Ну, я запустить именно запрос, показанный в профилировщике SSMS, и он выполняет идентично моему рукописному запросу. –
Я редактировал вопрос с дополнительной информацией о параметрах запроса. –
Запрос, как показано профилировщиком, схемой таблицы и индексом –