程序员的知识教程库

网站首页 > 教程分享 正文

DBA日记之Oracle索引设计原则二(oracle 索引 高效设计)

henian88 2024-10-25 11:51:25 教程分享 2 ℃ 0 评论

索引数量:

对于OLTP应用的业务系统,单个表上索引的个数不超过5个。对于OLTP系统来说,索引数量太多会严重影响DML操作

索引类型选择btree还是位图索引:

B-TREE索引,一般情况下选择普通的b-tree索引,也是oracle默认的索引。

位图索引, 对于不同的值很少的列,且数据量较大,且DML操作很少,这种情况可以选择使用位图索引。比如性别,只有男和女 且DML操作也会很少,此时选择位图索引,效率可能会更高。


复合索引

Oracle 复合索引设计原理:

前缀性:复合索引的前缀性是指只有当复合索引的第一个字段出现在SQL语句的谓词条件中时,该索引才会被用到。如复合索引为(ename,job,mgr),只要谓词条件中出现第一个字段ename,就可以用复合索引,否则不会用。唯一的例外是skip scan index,就是如果Oracle发现第一个字段的值很少,会自动拆分为两个复合索引。如复合索引(gender,ename,job,mgr),因为第一个字段gender只有两个值:男和女,因此Oracle会将这个索引拆分成('男',ename,job,mgr)和('女',ename,job,mgr)两个复合索引,这样即使gender没有出现在谓词条件中,也可以用该复合索引。

可选性:Oracle建议复合索引应按字段可选性(即值的多少)的高低进行排列,这是因为,字段值越多,可选性越强,定位的记录就越少,查询效率就越高。

设计原则:

创建复合索引时,需要考虑列在索引中的顺序,主要影响的是SKIP SCAN INDEX,当查询条件中有第一列时,不需要考虑列的分布情况。

当查询条件中没有第一列时,需要考虑列的分布情况。尽量把唯一值较少的列放在复合索引的第一列

如果复合索引所包含的字段超过3 个,那么仔细考虑其必要性,考虑减少复合的字段;

不管是单列索引还是复合索引,当列允许为空,且实际有空值时,在查询中可能会不走索引扫描,因为null值不在索引条目中。因此尽可能选择not null的列做为索引列,如果不能避免时,可以给一个默认值。

函数索引

尽量不采用函数索引,函数索引会在insert以及select时多一次函数计算的消耗。

递减索引

进行order by column desc排序时,综合考虑,创建column desc索引,不再额外进行排序操作。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表