Pra*_*kar 13 oracle clustered-index
我就我的问题挖了几个小时,但没有得到满意的答案。我还是有疑问。我发现了以下关于聚集索引的信息:
我得到了这些点,但我的问题是:
请找到我的表架构:
让我知道是否需要其他任何内容才能获得这些问题的答案。
a_h*_*ame 21
Oracle 数据库中是否存在聚集索引?因为我读了一些博客
就在这里。
它被称为“索引组织表”(IOT)——在我看来这是更好的名字,因为它清楚地表明索引和表是同一个物理事物(这就是为什么我们只能有一个聚集索引在 SQL Server 中)
如果是,请告诉我创建簇索引的 SQL 语句。
create clustered index
在 Oracle 中没有这样的东西。
要创建索引组织表,请使用create table
带有organization index
选项的语句。
在 Oracle 中,您通常将 IOT 用于非常窄的表。经常用于只包含主键列的表(例如 m:n 映射表),例如
create table assignment
(
person_id integer not null,
job_id integer not null,
primary key (person_id, job_id)
)
organization index;
Run Code Online (Sandbox Code Playgroud)
您可以创建具有更多列的 IOT,在这种情况下,您需要将非 pk 列定义为“包含”列。例如,如果分配表应该有额外的列,比如不属于主键的开始和结束日期:
create table assignment
(
person_id integer not null,
job_id integer not null,
start_date date,
end_date date,
primary key (person_id, job_id)
)
organization index
including start_date
overflow storage (initial 4k);
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息和示例,请参阅手册:https : //docs.oracle.com/database/121/SQLRF/statements_7002.htm#i2153235
有点不相关,但无论如何可能很有趣:
一篇有趣的博客文章质疑 SQL Server(和 MySQL)在创建表时使用聚集索引作为默认值的行为:
来自 Oracle 背景,我完全同意这一点。
ype*_*eᵀᴹ 10
我发现了以下关于聚集索引的信息:
- 数据按照聚集索引的顺序存储。
- 每个表只有一个聚集索引。
- 创建主键时,也会自动创建集群索引。
你挖了几个小时。您应该已经注意到,以上所有事实都是针对SQL Server而不是 Oracle 的。
Oracle 中的表(至少是普通表)没有聚集索引。有一种特殊的表,称为索引组织表 (IOT),它们具有类似的概念。Oracle 文档 (9i) 中的详细信息:索引组织表:
什么是索引组织表?
与普通表相比,索引组织表具有自己的结构化、存储和索引数据的方式。与普通表的比较可能有助于解释其独特性。
索引组织表与普通表
普通表中的一行具有稳定的物理位置。一旦建立了这个位置,该行就永远不会完全移动。即使它随着新数据的添加而被部分移动,在原始物理地址处总是有一个行片 - 由原始物理 rowid 标识 - 系统可以从中找到该行的其余部分。只要该行存在,它的物理 rowid 就不会改变。普通表中的索引同时存储列数据和 rowid。
索引组织表中的行没有稳定的物理位置。它将数据按排序顺序保存在建立在表主键上的 B* 树索引的叶子中。这些行可以四处移动以保留排序顺序。例如,插入会导致现有行移动到不同的插槽,甚至移动到不同的块。
B*-tree 索引的叶子保存主键和实际行数据。对表数据的更改 - 例如,添加新行,或者更新或删除现有行 - 只会更新索引。
另请参阅最新的 Oracle 11g 版本中有关(11g):索引组织表的文档。
归档时间: |
|
查看次数: |
48165 次 |
最近记录: |