使用场景: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语句尽可能的简单,避免一些复杂查询
尽量减少访问次数
避免使用(*)
需要什么查询什么,哪怕全字段查询(*也需要解析)
避免使用一些消耗资源的 *** 作
distinctunionominusintersectorder 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条)