我现在用的是oracle 9i
1.一个表建立多少个索引比较合适?比如说不大于5个
2.联合索引比单索引的效率高么?
3.compress 这个压缩 ,能起到什么作用?
4.上网上查资料时,都说oracle使用联合索引需要前导列,这个和版本有关系吗?
5.如果不需要前导列的话,reverse 这个反转 又起到什么作用呢?我自己用一个单表对索引进行了一个简单的测试,结果如下:
1、多个单索引 一起使用
会分别调用各自的索引2、单索引和无索引字段
会使用单索引3、联合索引和无索引字段 (不出现单索引字段)
会使用联合索引 (联合索引字段 不用强调顺序 ,也就是不需要前导列,无索引字段还可以在联合索引字段之间)4、单索引和联合索引一起使用
1)如果联合索引中字段全部出现 则使用联合索引 (联合索引字段 不用强调顺序)
2)如果联合索引中只有部分字段出现 则会使用单索引 5、联合索引和联合索引一起使用
1)如果其中一个联合索引中只有部分字段出现 则会使用另一个联合索引
2)如果两个都完全使用,或都不完全使用 会选择其中一个使用(不出现单索引字段,如果出现,会使用间单索引), 具体怎么选择的,不清楚????说的不专业 大家凑合看, 希望指点小弟一下。 先谢谢啦。
1.一个表建立多少个索引比较合适?比如说不大于5个
2.联合索引比单索引的效率高么?
3.compress 这个压缩 ,能起到什么作用?
4.上网上查资料时,都说oracle使用联合索引需要前导列,这个和版本有关系吗?
5.如果不需要前导列的话,reverse 这个反转 又起到什么作用呢?我自己用一个单表对索引进行了一个简单的测试,结果如下:
1、多个单索引 一起使用
会分别调用各自的索引2、单索引和无索引字段
会使用单索引3、联合索引和无索引字段 (不出现单索引字段)
会使用联合索引 (联合索引字段 不用强调顺序 ,也就是不需要前导列,无索引字段还可以在联合索引字段之间)4、单索引和联合索引一起使用
1)如果联合索引中字段全部出现 则使用联合索引 (联合索引字段 不用强调顺序)
2)如果联合索引中只有部分字段出现 则会使用单索引 5、联合索引和联合索引一起使用
1)如果其中一个联合索引中只有部分字段出现 则会使用另一个联合索引
2)如果两个都完全使用,或都不完全使用 会选择其中一个使用(不出现单索引字段,如果出现,会使用间单索引), 具体怎么选择的,不清楚????说的不专业 大家凑合看, 希望指点小弟一下。 先谢谢啦。
1.一个表建立多少个索引比较合适?比如说不大于5个
这个没有定论,楼主要综合查询效率和dml效率自己确定,索引可以加快select的查询速度,但也会降低delete,insert和update等dml语句的执行速度。
2.联合索引比单索引的效率高么?
如果联合索引中的多个字段都在where谓词中出现了,则联合索引效率比单列索引高,因为通过多个条件可以从索引中过滤得到更少的记录条数,也就减少了需要回表扫描的次数,甚至可以直接在联合索引中得到所查的所有结果,则不再需要回表。
但是由于多列的联合索引肯定要比单列索引大,也就是说同样的索引需要存储的物理块要多于单列索引,所以,如果查询中只出现了联合索引中的某一列,则其效率不如单列索引。
3.compress 这个压缩 ,能起到什么作用?
没研究过
4.上网上查资料时,都说oracle使用联合索引需要前导列,这个和版本有关系吗?
前导列跟版本没有关系。
前导列的概念是这样的,如果建立了f1,f2上的联合索引,则在查询时必须要用到f1,也就是所谓的前导列,该索引才会有效,因为索引是按照前导列排序的,如果where条件谓词中没有前导列,则需要执行索引扫描才能得到想要的结果,这种情况下其效率往往较差。
5.如果不需要前导列的话,reverse 这个反转 又起到什么作用呢?
鉴于前面描述的前导列的概念,我们考虑如下表存储table(f1,f2);
aa 1
ab 2
ac 3
ad 4
ae 5
如果我们对表table建立f1上的普通索引,由于按照f1进行排序,所以针对where f1=ad则需要遍历所有的a开始的索引,而如果对f1建立reverse索引,则由于da只有一个,则可以更快的得到需要的结果。
压缩数据,降低存储空间。但是如果数据变动时需要先对数据进行解压缩这样会造成性能下降。所以看你侧重那个方面了。