zoukankan      html  css  js  c++  java
  • SQL 子查询关联查询和非关联查询 性能分享

    今天做在写SQL时候发现有需要优化的SQL 语句,特拿出来和大家 分享一下:

    查询一 

    SELECT  SceneryId
    FROM    TableBcst bcst WITH ( NOLOCK )
    WHERE   bcst.PayMode = 1
            AND SceneryId NOT IN (
            SELECT  SceneryId
            FROM    TableBcst bcst WITH ( NOLOCK )
            WHERE   bcst.PayMode <> 1 )
     
    查询二

    SELECT DISTINCT
            bcst1.SceneryId
    FROM    TableBcst bcst1 WITH ( NOLOCK )
    WHERE   bcst1.PayMode = 1
            AND NOT EXISTS ( SELECT SceneryId
                             FROM   [TableBcst bcst2 WITH ( NOLOCK )
                             WHERE  bcst2.SceneryId = bcst1.SceneryId
                                    AND ( bcst2.PayMode > 1
                                          OR bcst2.PayMode < 1
                                        ) )
    查询 三
    SELECT DISTINCT
            bcst1.SceneryId
    FROM    TableBcst bcst1 WITH ( NOLOCK )
    WHERE   bcst1.PayMode = 1
            AND bcst1.SceneryId NOT IN (
            SELECT  SceneryId
            FROM    TableBcst bcst2 WITH ( NOLOCK )
            WHERE   bcst2.SceneryId = bcst1.SceneryId
                    AND ( bcst2.PayMode > 1
                          OR bcst2.PayMode < 1
                        ))

    以上三条语句查询结果是相同的,让我们在看看查询数据库统计结果如下:

    前提条件是:如查询一,外查询的数据结果集只有子查询数据结果集的1%

    DBCC DROPCLEANBUFFERS
    DBCC FREEPROCCACHE
    SET STATISTICS IO ON  

    SET STATISTICS TIME ON 


    统计结果如下:由于本人数据没有权限清除缓存区,所以部分数据不准确。

    查询一

     -------------------------------------------------------------------------------------------------      

    SQL Server 分析和编译时间: 
       CPU 时间 = 12 毫秒,占用时间 = 12 毫秒。

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

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

    (20 行受影响)
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    TableBcst '。扫描计数 2,逻辑读取 364 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 '

     SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 4 毫秒。

     

    查询二 

     ---------------------------------------------------------------------------------------------

    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 8 毫秒。
     SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
     SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    (20 行受影响)
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Tablebcst'。扫描计数 2,逻辑读取 364 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
     SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 4 毫秒。

    查询三

    ------------------------------------------------------------------------------------------------------------------- 

    SQL Server 分析和编译时间: 
       CPU 时间 = 12 毫秒,占用时间 = 12 毫秒。
     SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
     SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    (20 行受影响)
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'TableBcst'。扫描计数 2,逻辑读取 364 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
     SQL Server 执行时间:
       CPU 时间 = 15 毫秒,占用时间 = 4 毫秒。

    看看以上结果,也许有时候理论知识需要和实际情况相比较才能得出结论,在SQL Server 数据库技术内幕中理论也许你看过吧,有时候还是要看具体情况来判断吧。不要被统计结果给蒙骗了,因为数据量少,统计数据准确性不搞,今天下午刚好有空,抽时间和大家分享。


  • 相关阅读:
    [转]自定义水晶报表纸张大小
    [转]Winform(C#)DataGridView显示Tooltip
    格式化日期字符串
    工具下载地址
    servlet: org.apache.tomcat.util.http.fileupload.FileUploadException: Processing of multipart/formdata request failed
    <<精通Spring2.x>>笔记:第2章学习源码
    andriod 缩略图Thumbnails学习
    转: Eclipse程序员要掌握的常用快捷键
    代码:指定大小的图片
    Android自定义的Camera的图片会90度旋转问题
  • 原文地址:https://www.cnblogs.com/andyyu/p/2263246.html
Copyright © 2011-2022 走看看