2009-09-23 2 views
1

У меня есть запрос nhibernate, который генерирует такой запрос. Я только экстрагируют сценарии примераОптимизация запросов NHibernate

ВЫБОР ID ОТ СОТРУДНИКА ГДЕ EMPLOYEE.NAME = @ P1 и И MANAGER_ID В (@ р2, р3 @, @ р4 ... @ р) и др.

Используя NHprofiler, я нашел, что запрос занимает около 500 мс. Таблица имеет индекс имени и manager_id. Таблица сотрудников составляет около 6 миллионов записей.

Когда запрос имеет только одну запись для поиска в пределах manager_id, например.

ВЫБОР ID ОТ СОТРУДНИКА ГДЕ EMPLOYEE.NAME = @ P1 и И MANAGER_ID В (@ р2), то запрос завершается примерно за 2 секунды.

Следовательно, я попытался разделить этот запрос, используя окончательный запрос и выполнив запрос @n times (n - число pn). Однако производительность для каждого из этих запросов составляет около 400 мс или более.

Там есть эквивалент Storedproc (который имеет, если затем условия для нахождения идентификатора дерева менеджера) и работает намного быстрее ..

Есть ли что-то, что мне не хватает здесь?

Спасибо.

+0

У вас есть надлежащие индексы базы данных? –

+0

да .. его тот же db, что sp и nhibernate бьет ..! – bkhanal

ответ

0

Мысли ...

  • В принимает значение ..OR..OR..OR и т.д., так что вы есть сканирование индекса. Это убийца.

  • Являются ли индексы «покрывающими», чтобы избежать ключевых поисков?

  • В чем разница между двумя способами? Я хотел бы предложить, имея и поэтому оптимизатор может выбрать то, что лучше всего (основано на статистике, мощность и т.д.)

так:

CREATE INDEX IX_MN ON EMPLOYEE (MANAGER_ID, NAME) INCLUDE (ID) 
CREATE INDEX IX_NM ON EMPLOYEE (NAME, MANAGER_ID) INCLUDE (ID) 
  • Вы можете переписать в виде UNION/UNION ALL?

так:

SELECT ID FROM EMPLOYEE WHERE EMPLOYEE.NAME = @P1 AND AND MANAGER_ID = @p2 
UNION ALL 
SELECT ID FROM EMPLOYEE WHERE EMPLOYEE.NAME = @P1 AND AND MANAGER_ID = @p3 
UNION ALL 
SELECT ID FROM EMPLOYEE WHERE EMPLOYEE.NAME = @P1 AND AND MANAGER_ID = @p4 
UNION ALL 
SELECT ID FROM EMPLOYEE WHERE EMPLOYEE.NAME = @P1 AND AND MANAGER_ID = @p5 
UNION ALL 
.... 
  • Do @ p1 и p2 @ .. @ р совпадают с типами данных столбцов точно?

  • Как выглядит СП?

Смежные вопросы