oracle 表设计原则 :
1.尽量不使用复合主键
2.常访问的字段顺序应靠前
3.对于常关联查询的表应设计外键
4.对于查询消耗大而又不常变更的数据,可以适当做字段冗余
索引设计几个原则:
1.对索引的设计必须基于对业务的精通
2.区别对待OLTP与OLAP
3.在常用做查询条件,且选择性高的字段上建索引
4.对新增频繁的表慎加索引
5.根据不同的特点选择建不同的索引(B*、函数、位图等)
6.外键必须建索引
7.组合索引里最常用的字段放到前面
8.索引与表分别放在不同的表空间
9.建多少个索引应使用中庸原则,在常查询与常更新中权衡
分而治之
1.分区的作用:1.规范数据管理 2.提升性能
2.对特别大的表才采用分区管理
3.根据实际业务来分区,如要做数据定期备份与迁出,则宜按时间来分区
4.用于分区的键最好是常用作查询条件的字段,这样能提高查询性能
5.使用全局索引,慎用局部索引
6.分区粒度不宜太小
物化视图
1.对于复杂而高消耗的查询,如果使用频繁,应建成物化视图
2.物化视图是一种典型的以空间换时间的性能优化方式
3.对于更新频繁的表慎用物化视图
4.选择合适的刷新方式
减少IO与网络传输次数
1.尽量用较少的数据库请求,获取到需要的数据,能一次性取出的不分多次取出
2.对于频繁操作数据库的批量操作,应采用存储过程,减少不必要的网络传输
死锁与阻塞
1.对于需要频繁更新的数据,尽量避免放在长事务中,以免导致连锁反应
2.不是迫不得已,最好不要在ORACLE锁机制外再加自己设计的锁
3.减少事务大小,及时提交事务
4.尽量避免跨数据库的分布式事务,因为环境的复杂性,很容易导致阻塞
5.慎用位图索引,更新时容易导致死锁
编写SQL语句常用技巧
1.使用绑定变量
2.尽量用索引列做查询
3.关联或嵌套查询时,使用返回数据集少的表作为驱动表
4.避免不必要的排序
5.使用表的别名
6.对于返回数据集大的嵌套查询,使用EXISTS代替IN
7.根据实际情况选择UNION或UNION ALL
8.尽量不取多余的字段,如所需的字段全在索引列里,则可避免回表查询
9.对于需快速取出少量数据,且返回数据集很少的关联查询,可以使用嵌套查询,否则慎用嵌套查询
10.对于特殊的情况,可以考虑使用HINT,一般情况下忌用,避免结构变化导致不可预见的结果