none
执行效率 RRS feed

  • 问题

  • /*------------------------

    SELECT A.MV,A.MY*10000+A.MM*100+A.MD,A.MN,A.MP  FROM CAT  A WHERE A.MY*10000+A.MM*100+A.MD
    IN (SELECT MAX(MY*10000+MM*100+MD) AS ET FROM CAT
    WHERE A.MN=MN  GROUP BY MN  )


    SELECT A.MN,A.ET,B.MN,B.MP
    FROM (SELECT MN, MAX(MY*10000+MM*100+MD) AS ET
                 FROM  CAT GROUP BY MN)A,
            (SELECT MN,MY*10000+MM*100+MD AS ET,MN,MP
                FROM CAT) B 
        WHERE A.MN=B.MN AND A.ET=B.ET
    ------------------------*/
    SQL Server 分析和编译时间:
       CPU 时间 = 32 毫秒,占用时间 = 74 毫秒。

    (8372 行受影响)
    表 'Worktable'。扫描计数 3,逻辑读取 50809 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'CASMWAGT'。扫描计数 1,逻辑读取 118 次,物理读取 9 次,预读 165 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    (11 行受影响)

     SQL Server 执行时间:
       CPU 时间 = 281 毫秒,占用时间 = 329 毫秒。

    (8372 行受影响)
    表 'Worktable'。扫描计数 3,逻辑读取 50809 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'CASMWAGT'。扫描计数 1,逻辑读取 118 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    (10 行受影响)

     SQL Server 执行时间:
       CPU 时间 = 281 毫秒,占用时间 = 631 毫秒。


    星光总能为我指引方向
    2011年10月24日 7:44

答案

全部回复

  • 大家帮我分析一下哪一个执行效率更高啊,如果从IO来看,

    表 'CASMWAGT'。扫描计数 1,逻辑读取 118 次,物理读取 9 次,预读 165 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    要高于

    表 'CASMWAGT'。扫描计数 1,逻辑读取 118 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    但是从CPU来看

    SQL Server 执行时间:
       CPU 时间 = 281 毫秒,占用时间 = 329 毫秒。

    要低于

     SQL Server 执行时间:
       CPU 时间 = 281 毫秒,占用时间 = 631 毫秒。

    这是为什么呢


    星光总能为我指引方向
    2011年10月24日 7:51
  • 看IO 统计信息,就看逻辑读,这两个逻辑读是一样的。物理读 是没在缓存中 而去读硬盘的 次数 ,不能说明什么。

    你需要看执行计划,在加上 io 和 cpu 统计 更好的分析哪个查询更好些。

     

     

     

    2011年10月24日 8:48
  • 第二次没有物理读,是因为你的数据已经被SQL缓存。
    想不想时已是想,不如不想都不想。
    2011年10月24日 11:06
    版主