Concepts-第5章部分翻译(2)

来源:互联网 发布:c语言服务器开发 编辑:程序博客网 时间:2024/05/18 14:13

继续昨天的Concepts-第5章部分翻译(1) 文章,继续翻译下去,但是到翻译索引块的结构时,我停下来学习了Data Block 物理结构。不过今天也还是有收获的,学习了解了DataBlock的物理结构:)

我的翻译工作不会停止,每天进步一点点,哪怕是仅有的一点点我弄懂我也很是很开心。

下面是我今天晚上所翻译学习的一部分:

函数索引的依赖
函数索引依赖定义这个索引的表达式中的函数。如果这个函数是PL/SQL函数或者是包函数,那么对这个函数定义的改变会使函数索引失
效。
为了能够创建基于函数的索引,用户必须有create index或者create any index权限。
为了能够用函数索引:
  *索引被创建好之后这个表需要被分析;
  *必须保证这个查询不需要被索引的表达式中的任何一个NULL值,也就是说在函数索引中被索引的字段不能为NULL,因为这些有NULL值
    的记录信息是不被索引存储的。
   
下面部分讲额外的要求必备的条件:
确定性函数
任何用户所写的用于函数索引的函数必须定义时带有DETERMINISTIC关键字,主要是为了说明这个函数无论现在还是将来,对于给定的输
入参数的值的集合总是会返回同样的输出值。
定义函数的一些权限
索引的定义者需要有对这个函数的执行权限才能定义函数索引。如果这个函数的执行权限被撤消,则oracle数据库会标识这个索引是处于
DISABLED状态。索引的定义者为了能够有授予对基表的查询权限的权限并不需要拥有对这个函数的授予其他人执行权限的权限。(感觉这
句翻译的有点别扭,呵呵)
解决函数索引的依赖性
一个函数索引会依赖任何索引本身使用的函数。如果函数或者包含这个函数的包头被重新定义(或者索引定义者的执行函数的权限被撤消)
,则下面的情况会发生:
 *索引被标识为DISABLED
 *对于一些查询,如果优化器选择用已经标识为DISABLED的索引,则这些查询将会失败;
 *除非已经标识为DISABLED的索引被设置为UNUSABLE(不用)或者初始参数 SKIP_UNUSABLE_INDEXES =true,否则那些对已经标识为
  DISABLED的索引的DML操作将会失败;

对于函数索引如果该函数发生的改变,如果重新使这个函数索引生效,可以执行ALTER INDEX ... ENABLE语句;

索引是怎样存储的?
当创建一个索引,oracle数据库会在表空间中自动分配一个索引段来存储索引数据。你可以控制对索引所使用段空间以及被保留空间的分
配有下面几个方式:
  *为索引段设置存储参数来控制索引段的范围的分配;
  *为索引段设置PCTFREE参数来控制组成索引段范围的数据块的可用空间;

索引段所在的表空间或者是定义者默认的表空间或者是在定义索引时指定的表空间。没有必要将索引存放在与被索引表的表空间中。而且
你可以通过将索引以及被索引的表存放在位于不同磁盘的不同的表空间中可以改进那些需要用索引来做查询操作的查询性能,因为通过将
索引和表分开存储可以使oracle数据库对索引以及表记录的获取操作可以同时进行,而且不会相互之间有资源竞争;

索引块的结构