1. 尽量避免非操作符的使用,在索引上使用 NOT<> 等操作符,数据库管理系统是不会使用索引的,可以将查询语句转化为可以使用索引的查询。
  2. 避免对查询的列的操作,任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数,计算表达式,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
  3. 避免不必要的类型转化,需要注意的是,尽量避免潜在的数据类型转换。如将字符型数据与数值型数据比较,会自动将字符进行转换,从而导致全表扫描。
  4. 增加查询的范畴限制。避免全范围的搜索。
  5. 合理使用__IN__ 与__EXISTS__。例如:有A,B两个表,他们分别使用如下的情况:
    • 当只显示一个表的数据如 A,关系条件只加一个ID时,使用IN更合适,SQL语句如下:
    select * from A where id in (select id from B)
    • 当只显示一个表的数据如 A,关系条件不只一个列,例如关系条件涉及到的列为ID,col1 时,使用IN 就不方便了,可以使用EXISTS,SQL语句如下:
    select * from A where EXISTS (select 1 from B where id = A.id and col1 = A.col1)
    • in 与 exists 的区别:in 是把外表和内表作hash连接,而exists 是对外表作loop 循环,每次loop循环再对内表进行查询。一直来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。如果两个表中一个较小,一个是大表,则子查询大表用exists,子查询小表用in。
  6. 尽量去掉__<>__。尽量去掉<>,避免全表扫描,如果数据是枚举值,且取值范围固定,则修改OR 或者 IN a<>0 改为a>0 or a<0 a<>'' 改为a >''。
  7. 去掉where子句中的is null 和 is not null。where子句中的is null 和 is not null 将不会使用索引而是进行全表搜索,因此需要通过改变查询方式,分情况讨论等方法,去掉where子句中的is null 和 is not null ,is not null 改为A>0 或者 A>''。
  8. 尽量不要使用前导模糊查询。由于前导模糊查询(前面有%的like查询)不能利用索引,所以速度会比较慢。
  9. select 子句中避免使用 ' * '。当你想在select 子句中列出所有的column时,使用动态SQL列引用 ' * ' 是一个方便的方法,不幸的是,这是一个非常低效的方法。实际上,数据库在解析的过程中,会将' * ' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更过的时间。
  10. 规范所有SQL关键字的书写,比如 select,update,delete,from等,要么全部大写,要么全部小写,不要大小写混写。

SQL 语句优化方法的更多相关文章

  1. MySQL - SQL语句优化方法

    1.使用 show status 了解各种 SQL 的执行频率 mysql> show status like 'Com%'; 该命令可以查询 sql 命令的执行次数. 2.定位执行效率较低的 ...

  2. SQL语句优化方法

    1.1 注释使用 在语句中多写注释,注释不影响SQL语句的执行效率.增加代码的可读性. 1.2 对于事务的使用 尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行(如:可以让用户在界面上多几 ...

  3. SQL语句优化方法30例

    1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...

  4. SQL系列 - SQL语句优化个人总结

    关于SQL语句优化方法 有些是通用的(如避免Select *): 有些不同的数据库管理系统有所区别(如Where子句顺序): 然后必须根据实际环境进行调优,因为即使是相同的数据库和表,在数据量或其他环 ...

  5. 优化数据库的方法及SQL语句优化的原则

    优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...

  6. mysql优化sql语句的方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

  7. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  8. MySQL常用SQL语句优化

    推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...

  9. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

随机推荐

  1. SpringBoot ( 七 ) :springboot + mybatis 多数据源最简解决方案

    说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解 ...

  2. 详解MongoDB管理命令

    MongoDB是一个NoSQL数据库系统:一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表:而每个集合中可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由一 ...

  3. [译文]React v16(新特性)

    [译文]React v16(新特性) 查看原文内容 我们很高兴的宣布React v16.0发布了! 这个版本有很多长期被使用者期待的功能,包括: fragments (返回片段类型) error bo ...

  4. JavaScript基础4——关于语句流程控制(分支语句、循环语句等)

    分支语句 (1)if...else...语句,基本格式分三种,如下 <script type="text/javascript"> var i=50; //if语句 i ...

  5. 初探XRebel

    一.什么是XRebel? 1.介绍 XRebel 是不间断运行在 web 应用的交互式分析器.可以看到网页上的每一个操作在前端以及服务端.数据库.网络传输都花费多少时间,当发现问题会在浏览器中显示警告 ...

  6. MySQL 权限与用户表

    1.授权时创建用户 grant all privileges on *.* to zhengwenqiang@localhost identified by 'zhengwenqiang'; 2.收回 ...

  7. package-cleanup

    package-cleanup 是一个python开发的命令程序,用来清除本机已安装的.重复的 或孤立的软件包. desktop版的CentOS镜像包含这个工具,而Minimal版的CentOS镜像不 ...

  8. Using F2 to Rename Open Files

    Copy to your User keymap { "keys": ["shift+f2"], "command": "rena ...

  9. windows 下的python 安装pycrypto

    一般在官方网站下载pycrypto: https://www.dlitz.net/software/pycrypto/   然后使用命令就可以安装成功了: python setup.py build  ...

  10. Java禁止浏览器有缓存的源码

    Java禁止浏览器有缓存的源码 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...