`
luckyjaky
  • 浏览: 111807 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL语句效率问题的几点总结 <转>

阅读更多

1. SQL优化的原则是:

  将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。  
  调整不良SQL通常可以从以下几点切入:  
  检查不良的SQL,考虑其写法是否还有可优化内容  
  检查子查询   考虑SQL子查询是否可以用简单连接的方式进行重新书写  
  检查优化索引的使用  
  考虑数据库的优化器

2. 避免出现SELECT   *   FROM   table     语句,要明确查出的字段。    
   
3. 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,

    定位越准确,则该where条件越应该前移。  
   
4. 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,

    这样查询时只进行索引扫描,不读取数据块。

5. 在判断有无符合条件的记录时建议不要用SELECT   COUNT   (*)和select   top   1   语句。  
   
6. 使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,

    并尽量在SQL语句的最里层进行限定,以减少数据的处理量。  
   
7. 应绝对避免在order   by子句中使用表达式。  
   
8. 如果需要从关联表读数据,关联的表一般不要超过7个。  
   
9. 小心使用   IN   和   OR,需要注意In集合中的数据量。建议集合中的数据不超过200个。  
   
10. <>   用   <   、   >   代替,>用>=代替,<用<=代替,这样可以有效的利用索引。  
   
11. 在查询时尽量减少对多余数据的读取包括多余的列与多余的行。  
   
12. 对于复合索引要注意,例如在建立复合索引时列的顺序是F1,F2,F3,

     则在where或order   by子句中这些字段出现的顺序要与建立索引时的字段顺序一致,

    且必须包含第  一列。只能是F1或F1,F2或F1,F2,F3。否则不会用到该索引。 

13. 多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。

     格式如下

     select   sum(table1.je)   from   table1   table1,     table2     table2,               

     table3     table3   where   (table1的等值条件(=))   and   (table1的非等值条件) 

     and   (table2与table1的关联条件)   and (table2的等值条件)   and   (table2的非等值条件)    

     and (table3与table2的关联条件)   and   (table3的等值条件)   and   (table3的非等值件)。  
     注:关于多表查询时from     后面表的出现顺序对效率的影响还有待研究。  
   
14. 子查询问题。对于能用连接方式或者视图方式实现的功能,不要用子查询。

     例如:select   name    from   customer   where  

     customer_id   in   (   select     customer_id   from   order   where   money>1000)。

     应该用如下语句代替:select   name   from   customer  

    inner   join   order   on     customer.customer_id=order.customer_id  

    where   order.money>100。  
   
15. 在WHERE   子句中,避免对列的四则运算,

     特别是where   条件的左边,严禁使用运算与函数对列进行处理。

     比如有些地方   substring   可以用like代替。  
   
16. 如果在语句中有not   in(in)操作,

     应考虑用not   exists(exists)来重写,最好的办法是使用外连接实现。  
     
17. 对一个业务过程的处理,应该使事物的开始与结束之间的时间间隔越短越好,

     原则上做到数据库的读操作在前面完成,数据库写操作在后面完成,避免交叉。

18. 请小心不要对过多的列使用列函数和order   by,group   by等,谨慎使用disti软件开发t。  
   
19. 用union   all   代替   union,数据库执行union操作,

     首先先分别执行union两端的查询,

     将其放在临时表中,然后在对其进行排序,过滤重复的记录。  
     当已知的业务逻辑决定query   A和query   B中不会有重复记录时,

     应该用union   all代替union,以提高查询效率。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yaowenbin528/archive/2009/10/26/4728713.aspx

分享到:
评论

相关推荐

    优化sql语句执行效率几点注意事项

    优化sql语句执行效率几点需要注意的事项

    创力网站管理系统 v4.2

    新增动态JS设置,可设置刷新时间(针对某些JS需要定期更新问题)&lt;br&gt;14,提供财付通在线支付接口&lt;br&gt;15,修正几处SQL注入注入漏洞&lt;br&gt; a.User_Comment.asp&lt;br&gt; b.User_ConsumeLog.asp&lt;br&gt; c.Cl_ClsCount.asp&lt;br&gt;16,...

    SQL Server中存储过程比直接运行SQL语句慢的原因

    1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2. 经常会遇到复杂的业务逻辑和对数据库的...

    LECCO SQL Expert (智能自动SQL优化)

     优化模块的特点 LECCO SQL Expert优化模块的特点主要有以下几点: 1、自动优化SQL语句; 2、以人工智能知识库“反馈式搜索引擎”来重写性能优异的SQL语句; 3、找出所有等效的SQL语句及可能的执行计划; 4、...

    用java写的MyDB数据库管理器演示程序

    MyDB采用的是纯java的技术实现,网络通讯部分,服务器使用了QuickServer框架,驱动使用的是常规的Socket技术,使用了antlr来解析sql语句, 数据库的业务处理部分是我自己写的,为了实现日后的功能,还需要做一定的...

    达梦数据库_SQL语言手册

    达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...

    数据库系统概论chp3-2.pptx

    用户创建索引除了系统自动生成的索引外,也可以根据实际需要,使用对象资源管理器或利用SQL语句中的CREATE INDEX命令直接创建索引。 数据库系统概论chp3-2全文共66页,当前为第12页。 1. 建立索引 语句格式 CREATE ...

    SQL查询安全性及性能优化

     优化:【检查SQL语句是否能够使用索引,SQL语句如何执行效率高,制定一个执行计划】  编译:  执行SQL语句:【把编译过的查询要求提交并进行处理】 如何优化SQL 完善开发的管理 完善代码审核、测试机制,...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    在这里我要说明两点:1、我的示例文件总是有A和B分别是用C#和VB写的,演示的图片就用C#那一种的,都一样嘛,教程里面代码也是写两种用&lt;hr&gt;分割开,大家可以比较一下。2、我写教程的时候用的都是记事本来编写APS.NET...

    SQL SERVER 2000开发与管理应用实例

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...

    SQL语法大全

    rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\'...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

    无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。  《SQL Server 2008管理员必备指南》重要主题:  规划、部署和配置SQL Server 2008  管理...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

    无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。  《SQL Server 2008管理员必备指南》重要主题:  规划、部署和配置SQL Server 2008  管理...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

    无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。  《SQL Server 2008管理员必备指南》重要主题:  规划、部署和配置SQL Server 2008  管理...

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第11版)

    我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不...

Global site tag (gtag.js) - Google Analytics