今天无聊和朋友讨论分页,发现网上好多都是错的。网上常常查到的那个Top Not in 或者Max 大部分都不实用,不少都忽略了Order和性能问题。为此上网查了查,顺带把2000和2012版本的也补上了。html
先说说网上常见SQL的错误或者说局限问题编程
?性能
1测试 2spa 3.net 4code 5htm |
|
这样的确是能够取到分页数据,可是这是默认排序的,若是要按其中一列排序呢?那order by 加在哪里呢?里外都加,显然不行,外面的Order不起做用,只能嵌套,Oh my god,编程三个Select了,这效率。
为了好用效率高,整体思路仍是老老实实的用RowNumber解决,可是SQL2000没有RowNumber,其实咱们能够经过临时表自增列搞定,很少说,上例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 |
|
最后说下,根据老外的文章,在2012里,若是前面加上TOP(50),那么执行计划就会少读不少行数据(读的精准了),提升性能。可是鉴于本人手头没2012也没法测试。至少在2008R2上加不加TOP执行计划都同样。