• 四种sql server 数据库分页的测试


    SET statistics io on
    SET STATISTICS TIME ON
    GO

    View Code
    ----1
    PRINT 'fist begin'
    DECLARE @time DATETIME
    DECLARE @ms int
    SET @time =GETDATE()
    SELECT * FROM Client.client AS c
    INNER JOIN
    (
    SELECT RowNum, ClientID FROM
     (
      
    SELECT ROW_NUMBER()OVER(ORDER by ClientID ASCAS RowNum ,ClientID FROM client.client
     ) 
    AS cc
    WHERE cc.RowNum between 10000 and 10500
    )
    AS t
    ON c.ClientID = t.ClientID
    SET @ms = DATEDIFF(MS,@time,GETDATE())
    PRINT @ms
    PRINT 'fist end'
    GO
    方法2
    ----2
    PRINT 'second begin'
    DECLARE @time DATETIME
    DECLARE @ms int
    SET @time =GETDATE()
    SELECT * FROM 
    (
     
    SELECT ROW_NUMBER()OVER(ORDER by ClientID ASCAS RowNum ,* FROM client.client

    AS c WHERE c.RowNum BETWEEN 10000 AND 10500
    SET @ms = DATEDIFF(MS,@time,GETDATE())
    PRINT @ms
    PRINT 'second end'
    GO
    方法3
    --3

    PRINT 'third begin'
    DECLARE @time DATETIME
    DECLARE @ms int
    SET @time =GETDATE()
    SELECT TOP(500* FROM Client.Client
    WHERE ClientID NOT IN(SELECT TOP 9999 ClientID FROM Client.Client)

    SET @ms = DATEDIFF(MS,@time,GETDATE())
    PRINT @ms
    PRINT 'third end'
    GO
    方法4
    PRINT 'fourth begin'
    DECLARE @time DATETIME
    DECLARE @ms int
    SET @time =GETDATE()
    SELECT TOP(500* FROM Client.Client
    WHERE ClientID > (SELECT MAX(ClientID) FROM
    (
    SELECT top 9999 ClientID FROM Client.Client ORDER BY ClientID) as c )

    SET @ms = DATEDIFF(MS,@time,GETDATE())
    PRINT @ms
    PRINT 'fourth end'
    GO

    fist begin

    (501 row(s) affected)
    Table 'Client'. Scan count 1, logical reads 2658, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    (1 row(s) affected)

     SQL Server Execution Times:
       CPU time = 31 ms,  elapsed time = 218 ms.

     SQL Server Execution Times:
       CPU time = 0 ms,  elapsed time = 0 ms.
    220

    fist end

    second begin

    (501 row(s) affected)
    Table 'Client'. Scan count 1, logical reads 1155, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    (1 row(s) affected)

     SQL Server Execution Times:
       CPU time = 16 ms,  elapsed time = 158 ms.
    156

    second end

    third begin

    (500 row(s) affected)
    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Client'. Scan count 2, logical reads 1166, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    (1 row(s) affected)

     SQL Server Execution Times:
       CPU time = 47 ms,  elapsed time = 140 ms.
    140
    third end

    fourth begin

    (500 row(s) affected)
    Table 'Client'. Scan count 2, logical reads 1166, physical reads 0, read-ahead reads 6, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    (1 row(s) affected)

     SQL Server Execution Times:
       CPU time = 16 ms,  elapsed time = 230 ms.

    230

    fourth end

    数据量 6w

    个人测试结果

    SCAN count:4=3>1=2       3为2,其他为1

    logical reads :2>3=4>1 (2658>1166>1155)

     实际 time:4〉1>2>3   和执行顺序有关

    理论 time:2〉3>4〉1 ??????? 

    大数据量没测试。

    估计是数据量的问题, 大数据的时候应该差别挺大的。 有兴趣的可以测试一下。

    请提个建议。。。


     

  • 相关阅读:
    git学习记录——基础概念和文件的基本操作
    java 之 Properties 类
    java 之 Map类
    java 之 迭代器
    java 之 Collection类
    java 之日期时间操作
    java 之String类
    如何把ASP.NET MVC项目部署到本地IIS上
    [工具]Visual Studio
    [MVC][Shopping]Copy Will's Code
  • 原文地址:https://www.cnblogs.com/hu88oo/p/2113710.html
Copyright © 2020-2023  润新知