物联网(Index Organized Table
)的用例是什么?
假设我有像
这样的表格我知道IOT,但有点混淆IOT
答案 0 :(得分: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;
答案 1 :(得分:0)
将索引组织表视为索引。我们都知道索引的要点:提高对特定数据行的访问速度。这是在列子集上构建复合索引的技巧的性能优化,可用于满足常用查询。如果索引可以完全满足查询投影中的列,则优化器知道它根本不必从表中读取。
物联网就是这种方法的逻辑混乱:buidl索引并丢弃基础表。
决定是否将表实现为IOT有两个标准:
第二点是吸引大多数人的问题,也是IOT用例非常罕见的主要原因。 Oracle不建议在IOT上构建其他索引,这意味着任何不从主键驱动的访问都将是全表扫描。如果表很小并且我们不需要经常通过其他路径访问它可能无关紧要,但它对大多数应用程序表来说都是一个杀手。
候选表也可能具有相对较少的行数,并且可能是相当静态的。但这不是一个严格的规则;当然,与上面列出的两个标准相匹配的巨大的,易变的表仍然可以考虑用作IOT的实现。
那么什么才能成为一个好的候选人指数组织?参考数据。大多数代码查找表都是这样的:
code number not null primary key
description not null varchar2(30)
我们几乎总是只对获取给定代码的描述感兴趣。因此,将其构建为IOT将节省空间并减少获取描述的访问时间。