Oracle index 的运用

来源:互联网 发布:python分布式爬虫框架 编辑:程序博客网 时间:2024/05/21 07:13

1 查看某张表的index的详细信息。(column_position代表选择顺序)

select table_name, index_name, column_name, column_position
  from user_ind_columns
 where table_name = 'T_BASE_DATA_DICTIONARY'
 order by table_name, index_name, column_position;

 

 

 

2 在创建表时对列指定NOT NULL后会禁用NULL值,而且可以避免与使用NULL值相关的性能问题。(如:index :xxx is not null )

3OracleROWID硬编码成特定代码时,一定要小心谨慎。因为不同版本的ROWID结构会有所不同,而且在将来的版本里可能还会有所改变。我建议不要对ROWID进行硬编码

4通过改变所比较的列上的值,而不用改变列本身,就可以启用索引用。这样可避免全表扫描。

5对于有较低基数的列需要使用位图索引。性别列就是这样一个例子,它有两个可能值:男或女(基数仅为2)。位图对于低基数(少量的不同值)列来说非常快,这是因为索引的尺寸相对于B树索引来说小了很多。因为这些索引是低基数的B树索引,所以非常小因此您可以经常检索表中超过半数的行,并且仍使用位图索引.

在一个查询中合并多个位图索引后,可以使性能显著提高。位图索引使用固定长度的数据类型要比可变长度的数据类型好。较大尺寸的块也会提高对位图索引的存储和读取性能。

建议不要在一些联机事务处理(OLTP)应用程序中使用位图索引。B树索引的索引值中包含ROWID,这样Oracle就可以在行级别上锁定索引。位图索引存储为压缩的索引值,其中包含了一定范围的ROWID,因此Oracle必须针对一个给定值锁定所有范围内的ROWID。这种锁定类型可能在某些DML语句中造成死锁。SELECT语句不会受到这种锁定问题的影响。

位图索引有很多限制,如下所示:

       基于规则的优化器不会考虑位图索引。

       当执行ALTER TABLE语句并修改包含有位图索引的列时,会使位图索引失效。

       位图索引不包含任何列数据,并且不能用于任何类型的完整性检查。

       位图索引不能被声明为唯一索引。

       位图索引的最大长度为30

原创粉丝点击