假设有一个学生表Student有以下字段:
ID : 建了聚集索引
NAME : 对应的名字
GENDER: 性别
有一个存储过程,需要进行分页处理,取出某个性别的学生,并进行分页。
里面分页的SQL语句大概是这样的,假设,现在要取出按照ID进行排序的每页100个,第20页的数据。
SELECT TOP 20 * FROM Student
WHERE WHERE GENDER = '男' AND NOT EXISTS(
SELECT TOP 1900 ID FROM Student
WHERE GENDER = '男'
ORDER BY ID )
ORDER BY ID
由于是按照ID进行排序的,所以只要知道前1900的最大的ID,然后外层的SELECT取不小于前1900的ID的方式,也是等价的,
因此可以写作:
SELECT TOP 20 * FROM Student
WHERE WHERE GENDER = '男' AND ID > (
SELECT MAX( ID ) FROM (
SELECT TOP 1900 ID FROM Student
WHERE GENDER = '男'
ORDER BY ID ) )
ORDER BY ID
性能将大大提高。