sql server 分页sql高效写法(mysql limit替代写法)

 mysql, sqlserver  sql server 分页sql高效写法(mysql limit替代写法)已关闭评论
3月 182021
 

习惯了mysql, 切到sql server真TM不习惯,处处觉得sql server的使用太垃圾了, 完全是拉低开发人员效率的产品!

今天谈下sql server为人诟病的分页,OMG , 在mysql里使用 limit n,m就能解决的事情,在sql server里动作就大了,常见的使用 NOT in 语法(实在无法想象这样的查询效率),或者使用自己定义一个存储过程的方式(但这种方式条件又不够灵活), 推荐一个相对比较高效并且相对简单的写法如下

SELECT TOP 页大小 * FROM( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 )as A 
WHERE RowNumber > 页大小*(页数-1)

注解:

  • 首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名’RowNumber’ ,在over()方法中将table1按’id’做了升序排列
  • 然后将’RowNumber’列 与table1表的所有列 形成一个表A
  • 重点在where条件。假如当前页(currentPage)是第2页,每页显示10个数据(pageSzie)。那么第一页的数据就是第11-20条