zoukankan      html  css  js  c++  java
  • 设计高效sql一般经验谈

     

    1不用在sql语句使用系统默认的保留关键字

    2尽量用exists 和 not exists 代替 in 和 not in

             这条在sql2005之后,在索引一样,统计信息一样的情况下,exists ,in效果是一样的。

             以AdventureWorks数据库为例,查询在HumanResources.EmployeeAddress有地址的Employee信息,

    in 语句如下:

    SET STATISTICS IO ON

     

    SELECT * FROM HumanResources.Employee

    WHERE EmployeeID IN (SELECT EmployeeID FROM HumanResources.EmployeeAddress ea)

     

    SET STATISTICS IO OFF

    执行后,消息如下:

     

    (290 行受影响)

    'EmployeeAddress'。扫描计数1,逻辑读取4 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

    'Employee'。扫描计数1,逻辑读取9 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

    执行计划如图

    用exists ,语句如下,

     

    SET STATISTICS IO ON

    SELECT * FROM HumanResources.Employee

    WHERE EXISTS(SELECT EmployeeID FROM HumanResources.EmployeeAddress ea

                 WHERE

               HumanResources.Employee.EmployeeID=ea.EmployeeID)

              

     

    SET STATISTICS IO OFF

    执行后,消息如下:

     

    (290 行受影响)

    'EmployeeAddress'。扫描计数1,逻辑读取4 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

    'Employee'。扫描计数1,逻辑读取9 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

    执行计划如图:

    3尽量不用select * from …..,而要写字段名 select field1,field2,…

             这条没什么好说的,主要是按需查询,不要返回不必要的列和行。

    4在sql 查询中应尽量使用索引列来加快查询速度

    5任何在Order by 语句的非索引项或者有计算表达式都将降低查询速度

    6任何在where子句中使用is null 或 is not null 的语句不允许使用索引,效率较低

    7通配符%在词首时,系统不使用索引,当通配符出现在其他位置时,优化器就能利用索引

            

    8在海量数据的sql查询语句中尽量少用格式转换

    9任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等,查询时要尽可能将操作移至等号右边

    10 In 、or子句常会使索引失效

    11通常情况下,连接比子查询效率要高

  • 相关阅读:
    是否该让开发人员跟客户直接交流 狼人:
    2010年浏览器随HTML5而动 五大产品年终盘点 狼人:
    微软推出HTML5实验室站点及两项原型技术 狼人:
    传IE9 RC版将于1月28日公开发布 狼人:
    Python——基础篇 狼人:
    百万级访问量网站的技术准备工作 狼人:
    容器对象spring(4)_ bean属性 scope:作用域和lazyinit
    组件注册关于VC++6.0中,MSDev89\Gallery 文件夹为空的问题
    注入参数spring入门(7)装配Bean中构造参数的注入
    优惠播客成都传智播客java基础班大优惠
  • 原文地址:https://www.cnblogs.com/sthinker/p/6066747.html
Copyright © 2011-2022 走看看