У меня есть ниже запрос для поддержки работника нумерацией страниц сортируются по имени сотрудникаНастройка производительности этого запроса?
SELECT rowNumAlias
,Employee.employeeId
,Employee.NAME
FROM (
SELECT row_number() OVER (
ORDER BY Employee.NAME ASC
) rowNumAlias
,employeeId
,NAME
FROM Employee
) employeeData
INNER JOIN Employee ON Employee.employeeId = employeeData.employeeId
WHERE rowNumAlias BETWEEN ? AND ?
Где rowNumAlias параметр может быть любое целое число от 1 до 100
Этот запрос занимает около 7 секунд на моей базе данных SQL Server, имеющий 1 миллион записей. Есть ли способ минимизировать время выполнения запроса?
Вам необходимо [получить план выполнения] (http://stackoverflow.com/questions/7359702/how-do-i-obtain-a-query-execution-plan). Это скажет вам, что является самой медленной частью запроса и, возможно, даже предложит индексы, которые можно использовать для ускорения запроса. – Justin
Какая версия SQL Server? Если вы находитесь в 2012 году, есть еще лучшие способы сделать разбивку на страницы. Что скажет вам план выполнения запроса? Может быть, вам не хватает индекса (например, для Employee.name)? – jpw
Предполагая, что индексы pk/fk индексируются, заказ на имя сотрудника, вероятно, будет хитом производительности, а не «оптимизировать». значит, у него есть индекс? (или использовать синтаксис синтаксиса SQL Server 2012 лучше, если он доступен) –