oracle索引组织表

oracle索引组织表,oracle,Oracle,物联网(索引组织表)的用例是什么 假设我有一张桌子 身份证 名字 姓 我知道物联网,但对物联网的用例有点困惑。你的三个专栏并不是一个好的用例 当您经常从表中访问多个连续行时,IOT最有用。然后定义主键,以表示所需的顺序 一个很好的例子是历史股价等时间序列数据。为了绘制股票价格图表,许多行是以连续日期读取的 所以主键应该是股票代码(或安全ID)和日期。附加列可以是最后的价格和数量 一个常规的表——即使在ticker和date上有索引——也会慢得多,因为实际的行会分布在整个磁盘上。这是因为您无法影响

物联网(
索引组织表
)的用例是什么

假设我有一张桌子

  • 身份证
  • 名字

  • 我知道物联网,但对物联网的用例有点困惑。你的三个专栏并不是一个好的用例

    当您经常从表中访问多个连续行时,IOT最有用。然后定义主键,以表示所需的顺序

    一个很好的例子是历史股价等时间序列数据。为了绘制股票价格图表,许多行是以连续日期读取的

    所以主键应该是股票代码(或安全ID)和日期。附加列可以是最后的价格和数量

    一个常规的表——即使在ticker和date上有索引——也会慢得多,因为实际的行会分布在整个磁盘上。这是因为您无法影响行的顺序,而且数据是逐日插入的(而不是逐行插入)

    在索引组织的表中,同一个股票代码的数据最终出现在几个磁盘页上,并且可以很容易地找到所需的磁盘页

    表格的设置:

    CREATE TABLE MARKET_DATA
      (
        TICKER VARCHAR2(20 BYTE) NOT NULL ENABLE,
        P_DATE DATE NOT NULL ENABLE,
        LAST_PRICE NUMBER,
        VOLUME     NUMBER,
        CONSTRAINT MARKET_DATA_PK PRIMARY KEY (TICKER, P_DATE) ENABLE
      )
      ORGANIZATION INDEX;
    
    典型查询:

     SELECT TICKER, P_DATE, LAST_PRICE, VOLUME
     FROM MARKET_DATA
     WHERE TICKER = 'MSFT'
     AND P_DATE BETWEEN SYSDATE - 1825 AND SYSDATE
     ORDER BY P_DATE;
    

    您的三列并不是一个好的用例

    当您经常从表中访问多个连续行时,IOT最有用。然后定义主键,以表示所需的顺序

    一个很好的例子是历史股价等时间序列数据。为了绘制股票价格图表,许多行是以连续日期读取的

    所以主键应该是股票代码(或安全ID)和日期。附加列可以是最后的价格和数量

    一个常规的表——即使在ticker和date上有索引——也会慢得多,因为实际的行会分布在整个磁盘上。这是因为您无法影响行的顺序,而且数据是逐日插入的(而不是逐行插入)

    在索引组织的表中,同一个股票代码的数据最终出现在几个磁盘页上,并且可以很容易地找到所需的磁盘页

    表格的设置:

    CREATE TABLE MARKET_DATA
      (
        TICKER VARCHAR2(20 BYTE) NOT NULL ENABLE,
        P_DATE DATE NOT NULL ENABLE,
        LAST_PRICE NUMBER,
        VOLUME     NUMBER,
        CONSTRAINT MARKET_DATA_PK PRIMARY KEY (TICKER, P_DATE) ENABLE
      )
      ORGANIZATION INDEX;
    
    典型查询:

     SELECT TICKER, P_DATE, LAST_PRICE, VOLUME
     FROM MARKET_DATA
     WHERE TICKER = 'MSFT'
     AND P_DATE BETWEEN SYSDATE - 1825 AND SYSDATE
     ORDER BY P_DATE;
    

    将索引组织的表视为索引。我们都知道索引的意义:提高对特定数据行的访问速度。这是一个性能优化的技巧,在列的子集上构建复合索引,可以用来满足常见的运行查询。如果索引可以完全满足查询投影中的列,那么优化器知道它根本不必从表中读取

    物联网正是这种解决逻辑混乱的方法:构建索引并丢弃底层表

    决定是否将表作为物联网实施有两个标准:

  • 它应该由一个主键(一个或多个列)和最多一个其他列组成。(好的,也许一段时间还有两列,但这是一个警告标志)
  • 表的唯一访问路由是主键(或其前导列)
  • 第二点吸引了大多数人,也是物联网用例非常罕见的主要原因。Oracle不建议在IOT上构建其他索引,因此这意味着任何不从主键驱动的访问都将是完整的表扫描。如果表很小,并且我们不需要经常通过其他路径访问它,这可能无关紧要,但对于大多数应用程序表来说,它是一个杀手

    候选表的行数也可能相对较少,并且可能是相当静态的。但这不是一个硬性规定;当然,一个符合上述两个标准的庞大的、不稳定的表仍然可以考虑作为物联网实施

    那么,是什么造就了一个优秀的索引组织候选人呢?参考数据。大多数代码查找表如下所示:

    code number not null primary key
    description not null varchar2(30)
    

    我们几乎总是只对给定代码的描述感兴趣。因此,将其构建为物联网将节省空间并缩短获取描述的访问时间。

    将索引组织的表视为索引。我们都知道索引的意义:提高对特定数据行的访问速度。这是一个性能优化的技巧,在列的子集上构建复合索引,可以用来满足常见的运行查询。如果索引可以完全满足查询投影中的列,那么优化器知道它根本不必从表中读取

    物联网正是这种解决逻辑混乱的方法:构建索引并丢弃底层表

    决定是否将表作为物联网实施有两个标准:

  • 它应该由一个主键(一个或多个列)和最多一个其他列组成。(好的,也许一段时间还有两列,但这是一个警告标志)
  • 表的唯一访问路由是主键(或其前导列)
  • 第二点吸引了大多数人,也是物联网用例非常罕见的主要原因。Oracle不建议在IOT上构建其他索引,因此这意味着任何不从主键驱动的访问都将是完整的表扫描。如果表很小,并且我们不需要经常通过其他路径访问它,这可能无关紧要,但对于大多数应用程序表来说,它是一个杀手

    候选表的行数也可能相对较少,并且可能是相当静态的。但这不是一个硬性规定;当然,一个符合上述两个标准的庞大的、不稳定的表仍然可以考虑作为物联网实施

    那么,是什么造就了一个优秀的索引组织候选人呢?参考数据。大多数代码查找表如下所示:

    code number not null primary key
    description not null varchar2(30)
    
    我们几乎总是在一起