`
hideto
  • 浏览: 2649874 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL性能调优:1.2 特别语法调优

阅读更多
from http://www.beyondrails.com/blogs/43

1,一般数据库按从左到右方式解析表达式(Oracle是从右到左),对AND连接的表达式优化顺序,将更小可能发生的表达式放在前面
优化前:
... WHERE column1 = 'A' AND column2 = 'B'

优化后:
... WHERE column2 = 'B' AND column1 = 'A'
(assuming column2 = 'B' is less likely)


2,对OR连接的表达式优化顺序,将更大可能发生的表达式放在前面
优化前:
... WHERE column2 = 'B' OR column1 = 'A'

优化后:
... WHERE column1 = 'A' OR column2 = 'B'
assuming column1 = 'A' is most likely


3,对一系列OR连接的表达式,将相同的column放在一起
优化前:
... WHERE column1 = 1
       OR column2 = 3
       OR column1 = 2

优化后:
... WHERE column1 = 1
       OR column1 = 2
       OR column2 = 3


4,反向使用Distributive Law
优化前:
SELECT * FROM Table1
  WHERE (column1 = 1 AND column2 = 'A')
     OR (column1 = 1 AND column2 = 'B')

优化后:
SELECT * FROM Table1
  WHERE column1 = 1
    AND (column2 = 'A' OR column2 = 'B')


5,将NOT表达式用更易理解的方式替换
优化前:
... WHERE NOT (column1 > 5)

优化后:
... WHERE column1 <= 5


6,将不等号用大于和小于替换
优化前:
... WHERE NOT (bloodtype = 'O')

优化后:
... WHERE bloodtype < 'O'
       OR bloodtype > 'O'


7,将一系列OR连接的表达式用IN替换
优化前:
... WHERE column1 = 5
       OR column1 = 6

优化后:
... WHERE column1 IN (5, 6)


8,当IN后面是一个很密集的整数集时,查找"what is out"比查找"what is in"更好
优化前:
... WHERE column1 IN (1, 3, 4, 5)

优化后:
... WHERE column1 BETWEEN 1 AND 5
      AND column1 <> 2


9,不要将LIKE条件替换为>=,<等等,除非LIKE模式是一个参数如LIKE ?
优化前:
... WHERE column1 LIKE ?

优化后:
... WHERE column1 > SUBSTRING(? FROM 1 FOR 1)
      AND column1 LIKE ?


10,如果LIKE ?参数不带wildcard,并且前后空格等并不关注的话,则用等号来替换LIKE
优化前:
... WHERE column1 LIKE 'ABC'

优化后:
... WHERE column1 = 'ABC'


11,LIKE比多个SUBSTRING效率要高,所以不要替换

12,将UNION转换为OR
优化前:
SELECT * FROM Table1
  WHERE column1 = 5
UNION
SELECT * FROM Table1
  WHERE column2 = 5

优化后:
SELECT DISTINCT * FROM Table1
  WHERE column1 = 5
     OR column2 = 5


13,用CASE表达式来替换多个效率较低的查询条件的引用
优化前:
... WHERE slow_function(column1) = 3
       OR slow_function(column1) = 5

优化后:
... WHERE 1 =
       CASE slow_function(column1)
          WHEN 3 THEN 1
          WHEN 5 THEN 1
       END


14,在SELECT语句的SELECT关键字和FROM关键字之间的东西称为select list。将CASE表达式作为select list的最后的过滤条件。
分享到:
评论
1 楼 bingbing110 2011-08-28  
不错 学习了。。。

相关推荐

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    收获不止SQL优化

    1.2 整体性能工具的要点 4 1.2.1 五大性能报告的获取 5 1.2.2 五大报告关注的要点 10 1.3 案例的分享与交流 18 1.3.1 和并行等待有关的案例 18 1.3.2 和热块竞争有关的案例 19 1.3.3 和日志等待有关的案例 20...

    收获,不止SQL优化--抓住SQL的本质

    1.2 整体性能工具的要点 4 1.2.1 五大性能报表的获取 5 1.2.2 五大报表关注的要点 10 1.3 案例的分享与交流 18 1.3.1 和并行等待有关的案例 18 1.3.2 和热块竞争有关的案例 19 1.3.3 和日志等待有关的案例 20...

    程序员的SQL金典.rar

    透彻分析函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开窗函数等高级技术;通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法...

    程序员的SQL金典4-8

     10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  10.2.4 优化手法  10.3 事务  10.3.1 事务简介  10.3.2 事务的隔离  10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段...

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

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    程序员的SQL金典6-8

     10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  10.2.4 优化手法  10.3 事务  10.3.1 事务简介  10.3.2 事务的隔离  10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段...

    程序员的SQL金典7-8

     10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  10.2.4 优化手法  10.3 事务  10.3.1 事务简介  10.3.2 事务的隔离  10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段...

    程序员的SQL金典3-8

     10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  10.2.4 优化手法  10.3 事务  10.3.1 事务简介  10.3.2 事务的隔离  10.3.3 事务的隔离级别  10.3.4 事务的使用  10.4 自动增长字段...

    SQL Server 2008 商业智能完美解决方案(3)

    SQL Server 2008商业智能完美解决方案 3/3 SQL Server 2008 2010 商业智能完美解决方案 作者:兰吉特(Lynn Langit) 出版社:人民邮电出版社; 第1版 (2010年8月1日) ISBN:7115231117, 9787115231116 页码:545 ...

    SQL Server 2008商业智能完美解决方案 3/3

    SQL Server 2008商业智能完美解决方案 3/3 SQL Server 2008 2010 商业智能完美解决方案 作者:兰吉特(Lynn Langit) 出版社:人民邮电出版社; 第1版 (2010年8月1日) ISBN:7115231117, 9787115231116 页码:545 ------...

    SQL Server 2008商业智能完美解决方案 1/3

    10.2.2 MDX语法的其他元素 218 10.3 MDX核心函数 220 10.4 筛选MDX结果集 226 10.5 计算成员和命名集合 228 10.6 TopCount函数 230 10.7 Rank函数和组合 232 10.8 Head和Tail函数 235 10.9 MDX的层次结构函数 236 ...

    SQL Server 2008商业智能完美解决方案 2/3

    SQL Server 2008商业智能完美解决方案 2/3 SQL Server 2008 2010 商业智能完美解决方案 作者:兰吉特(Lynn Langit) 出版社:人民邮电出版社; 第1版 (2010年8月1日) ISBN:7115231117, 9787115231116 页码:545 ------...

    Oracle_Database_11g完全参考手册.part3/3

    通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...

    Oracle_Database_11g完全参考手册.part2/3

    通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...

    leetcode手册JAVA-JavaLearn:学习java的路线和项目实战,javalearner快来看一看吧!

    Java基本语法: 面向对象 接口 容器 异常 泛型: 反射 注释 I/O 图形化(如Swing) 1.1.2 JVM 类加载机制 字节码执行机制 jvm内存模型: GC垃圾回收 jvm性能监控与故障定位 jvm调优 1.1.3 并发与多线程 并发编程基础 ...

Global site tag (gtag.js) - Google Analytics