CREATE PROCEDURE P_GetPagedOrders2005
@startIndex INT,
@pageSize INT
AS
begin
WITH orderList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.orderid DESC)AS Row, O.orderid,O.orderdate,O.customerid,C.CompanyName,E.FirstName+' '+E.LastName as EmployeeName
from orders O
left outer join Customers C
on O.CustomerID=C.CustomerID
left outer join Employees E
on O.EmployeeID=E.EmployeeID)--这里是把所有数据都读出来,每次执行都会读取数据,这个结果集会缓存吗?会不会影响效率
SELECT orderid,orderdate,customerid,companyName,employeeName
FROM orderlist
WHERE Row between @startIndex and @startIndex+@pageSize-1
end
这个分页很不错的啊。
有查询条件就麻烦了。
分页参考:http://www.cnblogs.com/huxj/archive/2010/02/01/1660738.html
2005自带的分页功能,性能还不错,只能这么说,因为我也用这个
还不错。这个是在数据库的存储过程中的,可谓一次编译,多次使用。相比asp.net中DataView控件中自带的翻页效率高多了。
补充你问的这个结果及会缓存吗?不会。存储过程只是放在数据库中,第一次调用时会对该存储过程进行编译,下次在调用时会直接调用编译后的存储过程,也就是存储过程本身是有缓存的,可以这么理解。但是你查询的结果集是不会缓存的。
如果能够在where或者order后的字段中建立索引的话!!效率还是很高的!