方法一、直接限制返回区间 (只适应于mysql)
SELECT * FROM table WHERE 查询条件 ORDER BY 排序条件 LIMIT ((页码-1)*页大小),页大小;
优点:写法简单。 缺点:当页码和页大小过大时,性能明显下降。 适用:数据量不大。
方法二、ROW_NUMBER()
SELECT TOP 页大小 * FROM ( SELECT TOP (页码*页大小) ROW_NUMBER() OVER (ORDER BY 排序条件) AS RowNum, * FROM table WHERE 查询条件 ) AS tempTable WHERE RowNum BETWEEN (页码-1)*页大小+1 AND 页码*页大小 ORDER BY RowNum
优点:在数据量较大时相比NOT IN有优势。 缺点:小数据量时不如NOT IN。 适用:大部分分页查询需求。
eg:SELECT TOP 4 * FROM ( SELECT TOP (10) ROW_NUMBER() OVER (ORDER BY GuestAccount) AS RowNum, * FROM GuestUserHistory ) AS tempTable WHERE RowNum BETWEEN 6 AND 2*5 ORDER BY RowNum