我有一个包含数千种产品的数据库,每次运行不同的查询时,我都会查询它以拉回大量数据。我担心一旦项目上线并且越来越多的人开始访问该网站,该性能将受到打击。我无法增加服务器的功率,因此我希望有一个可以为我省去麻烦的解决方案。有什么方法可以在 sql 查询中加载集合吗?
select top 20 where xxx
select next 20
我不确定。
通过使用 SQL Server 2005 ROW_NUMBER() 提供的新函数,您可以获得带有行号的结果集。此行号可用于数据库端的分页。
CREATE PROCEDURE [dbo].[getcust]
@PageIndex INT,
@PageSize INT,
@Searchkey VARCHAR(255),
@TotalRecords int OUTPUT
AS
IF EXISTS(SELECT * FROM tbcustomer WHERE cust_firstname= @Searchkey)
BEGIN
SELECT @TotalRecords =count(*) FROM tbcustomer WHERE cust_firstname= @Searchkey;
WITH customer AS (
SELECT ROW_NUMBER() OVER (ORDER BY cust_firstname ASC) AS Row,
cust_id, cust_firstname,address,phone
FROM tbcustomer WHERE cust_firstname= @searchkey
)
SELECT cust_id,cust_firstname,address,phone FROM customer
WHERE Row between (@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
END