【问题标题】:What does a two-part single index mean?两部分单一索引是什么意思?
【发布时间】:2011-08-30 16:28:56
【问题描述】:

一般来说,表上的每个索引都会减慢插入到表中的速度 乘以三倍;两个索引通常使插入两次 慢作为一个指标。 (然而,由两部分组成的单一索引并没有差多少 而不是单部分的单一索引)。

我从 Richard Niemiec 所著的 Oracle 9i Performance Tuning Tips and Techniques 一书中获得了这个信息(Osborne Oracle Press Series)。

以下术语是什么意思:

  1. 两部分单索引
  2. 单部分单索引
  3. 还有更多种类的索引吗?

【问题讨论】:

    标签: oracle indexing


    【解决方案1】:

    我认为 Rich 的两部分索引是指复合索引,即建立在多列上的索引。像这样:

     create index t23_t_idx on t23 (col4, col2);
    

    而单个部分索引索引单个列:

    create index t23_s_idx on t23(col1);
    

    上面创建的索引是 b-tree 索引。 Oracle 有许多其他类型的索引。对于初学者,索引可以是唯一的,在这种情况下,它们只允许索引列中给定值的一个实例(或组合列的值的排列)。

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

    我们可以创建基于函数的索引,它允许我们索引确定性函数的结果(即保证对给定输入产生相同结果的函数)。这就是我们如何在忽略时间元素的日期列上建立索引:

    create index t23_fbi_idx on t23( trunc(col_34));
    

    我们还可以在文本列上构建域索引。并且有分区表的特殊索引。

    所有这些都在文档中进行了更详细的介绍。 Find out more

    【讨论】:

      【解决方案2】:

      我会假设作者在谈到“两部分单一索引”时指的是复合索引。术语“复合索引”是一种更常见的方式来指代表的多个列上的索引。

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

      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*-tree 索引,这是人们在引用没有限定符的“索引”时通常所说的意思。然而,Oracle 支持多种不同类型的索引——b*-tree 索引、位图索引、文本索引等。它创建 LOB 索引。它支持用户定义的可扩展索引。在每种类型的索引中,通常有几十种不同的选项。例如,您可以创建基于函数的 b*-tree 索引或位图连接索引,可以为 Oracle Text 索引指定自定义词法分析器,也可以为自己的自定义类型定义自己的索引结构。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-21
          • 2014-09-28
          • 2018-06-21
          • 1970-01-01
          • 2010-09-16
          • 2022-11-25
          • 2016-08-12
          • 1970-01-01
          相关资源
          最近更新 更多