我有以下查询,支持员工分页员工姓名进行排序此查询的性能调整?
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数据库中有100万条记录。 有没有一种方法可以最大限度地减少查询执行时间?
你需要[得到执行计划](http://stackoverflow.com/questions/7359702/how-do-i-obtain-a-query-execution-plan)。这会告诉你查询的最慢部分是什么,甚至可能会建议可以用来加快查询的索引。 – Justin 2014-09-22 10:11:26
哪个版本的SQL Server?如果你在2012年以上,有更好的方法来做分页。查询执行计划告诉你什么?也许你错过了一个索引(例如Employee.name)? – jpw 2014-09-22 10:13:17
假设pk/fk被索引,对员工姓名的排序很可能是性能问题,没有其他“优化”。所以它的名字有一个索引? (或者使用sql server 2012更好的分页语法(如果可用)) – 2014-09-22 10:20:32