本帖最后由 roy_88 于 2009-02-09 09:40:48 编辑

解决方案 »

  1.   

    以下讨论过类似
    http://topic.csdn.net/u/20080707/09/3c64cc80-5f7a-4116-8942-81c6deae9c07.html?68709510
      

  2.   

    --在插入64條記錄時這樣用反復執行,也很有意思,有時顯示順序正確,有時不正確alter index PK_t on T REBUILD;
    go
    select * from T
    select * from T with(nolock)
      

  3.   


    alter index PK_t on T REBUILD;
    之后
    select * from T应该总是一样的
    with(nolock)可能会不一样吧
      

  4.   

    每次重建都有可能不同,這估計數據頁與空間分配有關系不加鎖提示
    select * from T
    等同於
    select * from T with(index=PK_T)
      

  5.   

    不太相信重建索引索引,select * from T 会有改变 ..
      

  6.   

    加上WITH NOLOCK 提示,资料表扫描的行为是有可能发生改变的.不加,则会选择PK扫描,这点不管做了多少次reindex,结果的顺序应该都一样.
      

  7.   

    我的电脑上结果顺序是一样的
    环境: win2008 x64(中文) + sql 2008 中文企业版(64位)只是这个有点差异:
    表 't'。扫描计数 1,逻辑读取 66 次,物理读取 1 次,预读 64 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 't'。扫描计数 1,逻辑读取 65 次,物理读取 1 次,预读 64 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
      

  8.   

    表上只有一个cluster 索引, 按照资料的组织方式, 应该加不加 nolock 都走cluster 扫描吧(我看到的执行计划也确实如此)建议大家测试的时候把自己的环境也顺便粘出来给大家参考比较
      

  9.   

    test result:
    environment:windowsxp-sp3(tw)+sqlserver2008資料表 't'。掃描計數 1,邏輯讀取 66,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。資料表 't'。掃描計數 1,邏輯讀取 65,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。[/code]
      

  10.   

    test result:
    environment:windowsxp-sp3(tw)+sqlserver2008資料表 't'。掃描計數 1,邏輯讀取 66,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。資料表 't'。掃描計數 1,邏輯讀取 65,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。[/code]
      

  11.   


    环境:
    Windows Server 2003 Enterprise Edition -sp2 
    Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) SQL:create unique clustered  index pk_t on t(id)  
    表 't'。扫描计数 1,逻辑读取 63 次,物理读取 22 次,预读 35 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
      

  12.   

    环境:
    Windows Server 2003 Enterprise Edition -sp2 
    Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)   Jul  9 2008 14:43:34   Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Evaluation Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2) 
    create unique clustered  index pk_t on t(id)表 't'。扫描计数 1,逻辑读取 63 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
      

  13.   


    老大補上環境了环境: win2003 + sql 2005 sp2 
      

  14.   

    执行计划 Ctrl+L;
    執行計劃和執行步驟都相同,看不出原因