1

IOT ( Index Organized Table) 的用例是什么?

假设我有桌子

  1. ID
  2. 姓名

我知道物联网,但对用例有点困惑IOT

4

2 回答 2

4

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

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

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

所以主键是股票代码(或证券 ID)和日期。附加列可能是最后价格和交易量。

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

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

表的设置:

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;
于 2012-07-05T18:53:00.353 回答
0

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

物联网正是对其逻辑混乱采取的这种方法:构建索引并丢弃基础表。

决定是否将表实现为 IOT 有两个标准:

  1. 它应该由一个主键(一个或多个列)和最多一个其他列组成。(好吧,也许是另外两列,但这是一个警告标志)。
  2. 表的唯一访问路径是主键(或其前导列)。

第二点是吸引大多数人的地方,也是物联网用例很少见的主要原因。Oracle 不建议在 IOT 上构建其他索引,这意味着任何不从主键驱动的访问都将是全表扫描。如果表很小并且我们不需要经常通过其他路径访问它,这可能无关紧要,但它是大多数应用程序表的杀手。

候选表也可能具有相对较少的行数,并且可能是相当静态的。但这不是硬性规定;当然,仍然可以考虑将一个符合上面列出的两个标准的巨大的、易变的表作为物联网来实现。

那么是什么造就了一个好的候选dor索引组织呢?参考数据。大多数代码查找表是这样的:

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

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

于 2013-01-22T13:45:13.897 回答