0
点赞
收藏
分享

微信扫一扫

玩转oracle之浅谈SQL优化

忍禁 2022-01-07 阅读 68

SQL优化总体原则

使用场景:SQL优化适用于大数据使用时

那些方面进行优化:

  • 索引类型(普通索引,复合索引,全文索引等…)每个类型索引的特性是不一致的,因此使用索引前需要考虑,当前的表结构最佳适用于那个类型索引。

  • 缓存:(数据库缓存,缓存中间件Redis)

  • 锁机制:(读锁,写锁,行锁,页锁等各种类型的锁,oracle排它锁,共享锁)在加锁前,需要考虑当前业务,更加适用于那些锁。

  • 表的设计:考虑三大范式(表的规范严格,但效率降低)因此需要权衡适用。一般在架构设计时,都需要权衡。

  • 架构设计:读写分离(避免对全部数据进行加锁,而只是对少量的写操作加锁),分库分表

9.5万读单独放到读数据库,0.5万写单独放在写数据库中,这样一样,就只需要对0.5万的写操作进行加锁,用于防止并发冲突,而不需要对大量的9.5万读操作进行加锁。

  • 细节:char varchar varchar2 int mediumit ,对于一些相近的类型,需要权衡,那个更合适。

优化细节

基于oracle

  • 不要让Oracle做的太多 jdbc-oracle

如果java调用数据库,能代码实现的尽量代码实现,不要让oracle做的太多。jdbc-oracle

把一些复杂操作交给java,让sql语句尽可能的简单,避免一些复杂查询

  • 尽量减少访问次数

  • 避免使用(*)

需要什么查询什么,哪怕全字段查询(*也需要解析)

  • 避免使用一些消耗资源的操作

distinct\uniono\minus\intersect\order by

--尝试使用union all 替代union
--使用exists替代distinct
  • 避免索引失效

在where后面使用了函数,计算,not ,is null,自动转换

--不要select ... from emp where sal > 2500*2;导致失效
--where sal is null;导致失效
--如果sal有索引则以上写法都会使sal索引失效

--select ...from emp where sal = '123'--转换会使索引失效

参考网址:https://www.yuque.com/gi4u62/ve67in/st6mri#be4e412d

举报

相关推荐

0 条评论