如何确定Oracle索引是群集还是非群集?
我弄完了
select FIELD from TABLE where rownum <100
Run Code Online (Sandbox Code Playgroud)
在哪里FIELD构建索引的字段.我已经订购了元组,但结果是错误的,因为索引是非聚集的.
Vin*_*rat 10
默认情况下,Oracle中的所有索引都是非聚集的.Oracle中唯一的聚簇索引是索引组织表(IOT)主键索引.
您可以通过查看视图中的IOT_TYPE列来确定表是否是IOT ALL_TABLES(可以通过查询ALL_CONSTRAINTS和ALL_CONS_COLUMNS视图来确定其主键).
以下是您的查询可能返回有序行的一些原因:
FIELD是其主键的主要部分.FIELD,有时会在递增的标识列上发生.案例2只会偶然返回已排序的行.无法保证插入的顺序,而且如果某些事件在将来碰巧有可用空间,Oracle可以自由地重用旧块,从而破坏脆弱的排序.
大多数情况下,情况1将返回有序行,但是您不应该依赖它,因为返回的行的顺序取决于访问路径的算法,该算法将来可能会更改(或者如果您更改数据库参数,尤其是并行性).
在这两种情况下,如果您想要有序行,您应该提供ORDER BY子句:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;
Run Code Online (Sandbox Code Playgroud)
在Sybase,MS SQL Server和其他可能的情况下实现的"群集"索引(其中行按索引列的顺序物理存储)在Oracle中不存在."集群" 在Oracle中具有不同的含义,我相信,它与块和表的组织方式有关.
Oracle 确实有"索引组织表",它们在物理上是等价的,但它们的使用频率要低得多,因为查询优化器的工作方式不同.
我最接近识别问题的答案是尝试这样的事情:
SELECT IOT_TYPE FROM user_tables
WHERE table_name = '<your table name>'
Run Code Online (Sandbox Code Playgroud)
我的10g实例报告IOT或null相应的.
| 归档时间: |
|
| 查看次数: |
13080 次 |
| 最近记录: |