Oracle 之sql优化

Posted by Will on September 17, 2017

“walk beside you ”

前言

  因为在项目里使用最多的就是Oracle,所以这里记录下优化经验~


正文

Sql的执行过程

  sql执行过程: java.long.Object   由图可知:在sql执行的时候,会先在缓存区查找是否执行过相同的sql,如果执行过,则取出执行计划,直接执行,从而省去了在重新解析的过程,省去了CPU的计算时间。 由此可得到优化sql的方法:

  • Sql相同单where条件不同的语句,要使用绑定变量的方式执行。因为这样Oracle会认为是同一条sql语句
  • Sql语句要使用相同格式的书写(大小写)。因为Oracle会区分大小写,语句一样,但大小写不一样,则会区别为两条不同的语句 *

Sql语句优化规则

  • 语句书写规则
    • 一般小表为基表这样会减少IO操作(好像记得Oracle优化器会自动优化)
    • where后面的条件能走索引、能过滤大多数数据的条件,尽量放到前面(好像记得Oracle优化器会自动优化…)
    • select 后不要直接写 * ,应该是用到什么数据,写什么数据,尽量减少数据传输的大小
    • 在使用like 查询时 ‘%A’ 百分号在前面的查询不会走索引,百分号在后面的 ‘A%’ 则会走索引
    • 在删除表的时候,有两种选择:delete与turncate ,前者可以回滚,turncate则不可回滚,所以turncate效率更高
    • 在能用 in 的情况下,不要使用 or
    • 不要在索引列上使用函数
    • 尽量不要使用 去重,分组等函数
    • where后索引上的条件不要使用函数
    • 在使用 order by 的时候,可以考虑添加对应的索引
    • 避免字段的类型,与书写的条件类型不一致,会导致索引失效    ing…..