sql优化-0-SQL优化指导原则
SQL优化:大量数据时使用
哪些方面进行优化:
- 索引类型:普通索引、复合索引、全文索引等,每个类型索引的特性是不一致的,因此使用索引前
需要考虑,当前的表结构 最佳适用于那个类型索引。 - 缓存:数据库缓存、缓存中间件Redis
- 锁机制:排它锁、共享锁;读锁、写锁、行锁、页锁等各种类型的锁。在加锁前,需要考虑当前
业务,更加适用于哪些锁。 - 表的设计:三大范式可以提高规范性,但也会降低效率,因此需要权衡使用。
- 架构设计:读写分离(避免对全部数据进行加锁,而只是对少量的写操作加锁),9.5万读 单独放
到 读数据库,0.5万写 单独放在 写数据库中。这样一来,就只需要对0.5万的写操作进行加锁,用
于防止并发冲突,而不需要对大量的9.5万读操作进行加锁。分库分表 - 细节:char varchar varchar2,int,mediumint,对于相近的类型,需要权衡 哪个更合适。
一般在架构设计时,都需要进行"权衡"。到底使用哪种,必须根据经验、性能、压力测试。
基于oracle
- 不要让oracle做的太多,jdbc-oracle(把一些复杂操作交给iava去做);让sql语句尽可能的简单,避免一些复杂查询
- 尽量减少访问次数
- 避免使用"*",只挑选需要的字段查询
select * from student;
select id,name,age from student;
- 避免使用一些消耗资源的操作:distinct\union\minus\intersect\order by
例如可以使用union all替代union
使用exists替代distinct - 避免索引失效
避免在where,后面使用函数、计算、Not、is null、自动转换
例如,不要:select ... from emp where sal>2500*2 (这应该是sal*2 > 5000 才会索引失效) | where sal is null;select ... from emp where sal ='123'
如果sal有索引,则以上写法都会使sal索引失效