Oracle 由两部分组成的单一指数意味着什么?

Oracle 由两部分组成的单一指数意味着什么?,oracle,indexing,Oracle,Indexing,通常,表上的每个索引都会减慢插入到表中的速度 三倍;两个索引通常使插入的时间延长一倍 像一个索引一样慢。(然而,一个由两部分组成的单一指数并不比这更糟糕 而不是单个部分(单个索引) 我从Richard Niemiec的《Oracle 9i性能调优技巧和技术》(奥斯本Oracle出版社系列)一书中得到了这一点 以下术语的含义是什么: 两部分单指数 单部分单索引 还有其他类型的索引吗 通过两部分索引,我认为Rich意味着一个复合索引,即建立在多个列上的索引。像这样: create index t

通常,表上的每个索引都会减慢插入到表中的速度 三倍;两个索引通常使插入的时间延长一倍 像一个索引一样慢。(然而,一个由两部分组成的单一指数并不比这更糟糕 而不是单个部分(单个索引)

我从Richard Niemiec的《Oracle 9i性能调优技巧和技术》(奥斯本Oracle出版社系列)一书中得到了这一点

以下术语的含义是什么:

  • 两部分单指数
  • 单部分单索引
  • 还有其他类型的索引吗

  • 通过两部分索引,我认为Rich意味着一个复合索引,即建立在多个列上的索引。像这样:

     create index t23_t_idx on t23 (col4, col2);
    
    而单个部分索引索引单个列:

    create index t23_s_idx on t23(col1);
    
    上面创建的索引是b树索引。Oracle还有许多其他类型的索引。首先,索引可以是唯一的,在这种情况下,它们只允许索引列中给定值的一个实例(或组合列的值排列)

    还有位映射索引,这会对DML造成更高的性能损失,但会加速某些类型的查询;在数据仓库之外很少遇到位图索引

    我们可以创建基于函数的索引,使我们能够索引确定性函数的结果(即,保证为给定输入生成相同结果的函数)。这就是我们如何在忽略时间元素的日期列上构建索引的方法:

    create index t23_fbi_idx on t23( trunc(col_34));
    
    我们还可以在文本列上构建域索引。并且对于分区表有特殊的索引


    所有这些都将在文档中详细介绍

    由于作者似乎从未真正定义过这个术语,我只能猜测,它们的意思是两部分的单索引是由两列组成的复合键,而单部分的单索引是基于一列的索引。

    我假设作者在谈论索引时引用的是复合索引“由两部分组成的单索引”。术语“复合索引”是一种更常见的方式,用于指代表中多列的索引

    如果在两列上有一个复合索引,那么在插入期间只需要维护一个索引结构,因此索引维护的开销与维护一个单列索引的开销相差不大

    CREATE TABLE t1 (
      col1 NUMBER,
      col2 NUMBER,
      col3 NUMBER
    );
    
    CREATE INDEX t1_composite_idx 
        ON t1( col1, col2 );
    
    另一方面,如果在每一列上分别创建单独的索引,Oracle必须维护两个单独的索引结构,这使所需的索引维护量增加了一倍

    CREATE TABLE t1 (
      col1 NUMBER,
      col2 NUMBER,
      col3 NUMBER
    );
    
    CREATE INDEX t1_idx1
        ON t1( col1 );
    
    CREATE INDEX t1_idx2
        ON t1( col2 );
    
    然而,我对“三要素”相当谨慎然而,作者引用了这句话。有许多变量发挥作用,而这些变量并没有被特定的经验法则所捕获。请记住,添加索引可能会给插入操作带来巨大的成本,但在权衡创建另一个索引的利弊时,衡量实际成本更为有用

    还有其他类型的索引吗

    至于你的最后一个问题——Oracle有很多不同类型的索引(特别是当我们将复合索引作为不同类型的索引计算时)。这个答案只涉及b*树索引,这是人们通常在没有限定词的情况下引用“索引”时的意思。但是,Oracle支持多种不同类型的索引--b*-树索引、位图索引、文本索引等。它创建LOB索引。它支持用户定义的可扩展索引。在每种类型的指数中,通常有几十种不同的选择。例如,可以创建基于函数的b*树索引或位图联接索引,可以为Oracle文本索引指定自定义词法,也可以为自定义类型定义自己的索引结构