“walk beside you ”
前言
因为在项目里使用最多的就是Oracle,所以这里记录下优化经验~
正文
Sql的执行过程
sql执行过程:
由图可知:在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…..