设为首页 | 加入收藏  
软件定制开发
  网站首页 关于我们 新闻中心 产品介绍 解决方案 成功案例 服务支持 联系我们
首页 > 行业动态
 
【老话长谈SQL Server数据库分页的几大优势】
来源:www.sywebsoft.com 发布者:领航科技  发布时间:2019-04-20 
 

在讨论性能之前,首先需要明确的是,我们在编写SQL语句的时候,尽量要减少不必要字段的输出,文中出于演示,所以都用的*,在实际中不要这样。还有就是要根据业务逻辑,比如查询条件,建立合适的聚合索引和非聚合索引,索引对于查找的效率影响非常大,SQL中的索引其实就是建立某种平衡查找树,如B树来进行,这方面的知识可以看我之前写的算法中的文章,再有就是了解一下SQL Server 的一些特性比如CTE,IN 和Exist的区别等等,有些小的地方对性能可能有一定的影响。

我把下面的语句拷贝出来,可以看到

EXEC sp_executesql NSELECT [t1].[ProductID], [t1].[ProductName], [t1].[SupplierID], [t1].[CategoryID], [t1].[QuantityPerUnit], [t1].[UnitPrice], [t1].[UnitsInStock], [t1].[UnitsOnOrder], [t1].[ReorderLevel], [t1].[Discontinued]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[UnitPrice] DESC) AS [ROW_NUMBER], [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
    FROM [dbo].[Products] AS [t0]
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER], N@p0 int,@p1 int, @p0 = 70, @p1 = 10
使用ROW_NUMBER来进行分页是一种使用很广的分页方式, 在本文开头讲到在LINQ中可以采用的TAKE 和 SKIP语句,但是与数据库交互只能使用SQL语句,LINQ在内部会帮我们转化为合适的SQL语句,语句里面其实也是采用ROW_NUMBER这一函数,为了演示,我们新建一个Console程序,然后在里面添加一个LINQ To SQL的类,使用方法非常简单,如下:

老话长谈SQL Server数据库分页的几大优势,策略很简单,首先我们选取包含要查页的数据,然后使用ROW_NUMER函数进行编号, 然后在外查询中指定rownum大于页起始记录即可。这种方式简单快捷。

这里还有一种使用CTE的方式 (common_table_expression,公用表表达式,不是CTE四六级哦, 我第一次接触到这个是面试的时候被问到如何使用SQL编写递归, 呵呵),使用很简单,就是把内查询放在CTE 里面,如下:

WITH    ProductEntity
          AS ( SELECT TOP ( @pageSize * @pageIndex )
                        ROW_NUMBER() OVER ( ORDER BY dbo.Products.UnitPrice DESC ) AS rownum ,
                        *
               FROM     dbo.Products
             )
SELECT  *
FROM    ProductEntity
WHERE   ProductEntity.rownum > ( @pageSize * ( @pageIndex - 1 ) )
ORDER BY ProductEntity.UnitPrice 

下一篇:教你快速学会MySQL数据库
 
推荐文章

教你快速学会MySQL数据库 [2019-04-20]
软件开发中海量数据的处理方式 [2019-04-20]
2018年排名前100的HTML5 [2019-04-20]
asp.net爬取门户数据可视化展示 [2019-04-20]
python三大器(装饰器/生成器/迭代器) [2019-04-20]
我们的网站升级了 [2019-04-20]
 
沈阳软件开发
沈阳软件定制开发
沈阳软件公司
沈阳软件开发公司
首页
关于我们
新闻中心
产品介绍
解决方案
成功案例
服务支持
联系我们
关于领航
 
公司地址:沈阳市沈河区北站路77-1号光达大厦C座13层
邮政编码:110013
客服电话:13840539193 024-31281857
Email:2579047692@qq.com
客服Q Q:2579047692
官方微信
 
Copyright @ 2005-2019 sywebsoft.com All Right Reserved
展开