zoukankan      html  css  js  c++  java
  • sql执行顺序与性能优化小技巧(一)


    关于sql条件匹配对执行效率影响测试

    首先,创建一个标量函数
    create function ff_test()

    returns int

    as

    begin

         declare @i int=0

         while(@i<100000000)

         set @i+=1

         return @i

    end

    其次,选定随意一张表,这里使用业务表mt_delegate

    观察如下两种情形

    1.   select * from mt_delegate where procid=-1 or dbo.ff_test()>10000

    2.   select * from mt_delegate where dbo.ff_test()>10000 or procid=-1

    结果是where条件语句的次序不会对执行产生影响,明显sql引擎对where条件已做优化

    再观察如下情形

    1.------------------------------------------------------------------------------------------------
     select a.* from dbo.mt_delegate a
                inner join dbo.mt_delegate b on a.procid=b.procid and (dbo. ff_test()>10000 or  
     a.activityid=-1)

    2.------------------------------------------------------------------------------------------------
      select a.* from dbo.mt_delegate a
                inner join dbo.mt_delegate b on a.procid=b.procid and ( a.activityid=-1 or  
    dbo. ff_test()>10000 )

    结果,1情形查询明显效率低下,而2情形很快出结果,由此推定SQL连接查询条件执行是按照由左向右顺序比对,而非一些文章所说右匹配

    结论,SQL查询连接查询条件和where条件对条件的序列要求不同,连接查询建议将大概率条件置于左侧

  • 相关阅读:
    QT -- 文本文件的读写(QFile、QTextStream)
    QT -- 单例模式
    QT -- 代码封装成库给C调用的问题
    QSS -- QSS入门1
    什么是 GPU 加速?
    QT -- 文件操作 QFile
    C++ -- break和continue的区别
    C++ -- Switch的基本用法
    C++ -- ?:运算符
    OpenCV -- cv::IMREAD_GRAYSCALE 与 cv::cvtColor
  • 原文地址:https://www.cnblogs.com/jeffry/p/5655234.html
Copyright © 2011-2022 走看看