现在的位置: 首页 > 综合 > 正文

一个分页SQL查询的优化(基于SQL SERVER)

2013年10月08日 ⁄ 综合 ⁄ 共 491字 ⁄ 字号 评论关闭

 

 

 

假设有一个学生表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

 

性能将大大提高。

    

 

抱歉!评论已关闭.