zoukankan      html  css  js  c++  java
  • 数据分页SQL语句的比较

    建立表

    CREATE TABLE [TestTable] ( 
    [ID] [int] IDENTITY (1, 1) NOT NULL , 
    [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , 
    [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , 
    [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , 
    [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY] 
    GO 

    插入数据:(2万条,用更多的数据测试会明显一些)

    SET IDENTITY_INSERT TestTable ON 
    
    declare @i int 
    set @i=1 
    while @i<=20000 
    begin 
    insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, ''FirstName_XXX'',''LastName_XXX'',''Country_XXX'',''Note_XXX'') 
    set @i=@i+1 
    end 
    
    SET IDENTITY_INSERT TestTable OFF 

    分页方案一:(利用SqlServer2005中的新特性ROW_NUMBER进行分页)

    Select * FROM (
      select ROW_NUMBER()Over(order by id desc) as rowId,* from TestTable
    ) as mytable
    where rowId between 21 and 40

    说明:效率高,但存在版本兼容性问题,只兼容SQL SERVER2005及以上版本

    分页方案二:(利用Not InSELECT TOP分页)

    SELECT TOP 10 *
    FROM TestTable
    WHERE (ID NOT IN
    (SELECT TOP 20 id
    FROM TestTable
    ORDER BY id))
    ORDER BY ID

    说明:效率次之,根据主键ID分页,也可根据其他排序字段分页。与方案三相比较,在处理1000条以下数据时,效率优于方案三。但处理大数据时次于方案三。  

    分页方案三:(利用ID大于多少和SELECT TOP分页)

    SELECT TOP 10 *
    FROM TestTable
    WHERE (ID >
    (SELECT MAX(id)
    FROM (SELECT TOP 20 id
    FROM TestTable
    ORDER BY id) AS T))
    ORDER BY ID 

    说明:效率次之,自能根据主键ID分页,也可根据其他排序字段分页(将id替换为排序字段名),在1000条以上数据检索时,效率高于方案二

    分页方案四:无主键表,使用临时表分页

    备注:SQL Server 查看查询时间,依次点击查询->查询选项->高级->选中“SET STATISTICS TIME”->确定。在“消息”中查看查询时间

  • 相关阅读:
    Wincc的使用
    三菱Ethernet工业以太网
    Wincc flexable的局势视图的组态
    Wincc flexable的数据记录的组态
    Wincc flexable的画面浏览切换组态
    CP342-5做主站的profibus-dp组态应用
    Winccflexable触摸屏的报警
    Wincc flexable的按钮组态
    《Java从入门到精通》第八章学习笔记
    Java Lab(1)控制台下的人物PK
  • 原文地址:https://www.cnblogs.com/archip/p/3394722.html
Copyright © 2011-2022 走看看