Oracle中的索引是聚集的还是未聚集的?
如何确定Oracle索引是群集索引还是非群集索引 我做完了Oracle中的索引是聚集的还是未聚集的?,oracle,indexing,Oracle,Indexing,如何确定Oracle索引是群集索引还是非群集索引 我做完了 select FIELD from TABLE where rownum <100 其中FIELD是构建索引的字段。我对元组进行了排序,但结果是错误的,因为索引未进行聚类。Oracle中没有SQL Server和Sybase中的聚类索引概念。有一个类似但不相同的索引。默认情况下,Oracle中的所有索引都是未聚集的。Oracle中唯一的聚集索引是索引组织的表IOT主键索引 您可以通过查看ALL_TABLES视图中的IOT_TYP
select FIELD from TABLE where rownum <100
其中FIELD是构建索引的字段。我对元组进行了排序,但结果是错误的,因为索引未进行聚类。Oracle中没有SQL Server和Sybase中的聚类索引概念。有一个类似但不相同的索引。默认情况下,Oracle中的所有索引都是未聚集的。Oracle中唯一的聚集索引是索引组织的表IOT主键索引 您可以通过查看ALL_TABLES视图中的IOT_TYPE列来确定表是否为IOT,其主键可以通过查询ALL_约束和ALL_CONS_列视图来确定 以下是查询可能返回有序行的一些原因: 您的表是索引组织的,字段是其主键的前导部分。 您的表是堆组织的,但行是按字段顺序排列的,这种情况有时发生在递增的标识列上。 案例2只会偶然返回已排序的行。插入的顺序没有保证,而且,如果某些块将来碰巧有可用空间,Oracle可以自由地重用旧块,从而破坏脆弱的顺序 案例1将在大多数情况下返回有序的行,但是您不应该依赖于它,因为返回的行的顺序取决于访问路径的算法,该算法将来可能会更改,或者如果您更改DB参数,尤其是并行性,则会更改 在这两种情况下,如果您想要有序行,则应提供ORDER BY子句:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;
在Sybase、MS SQL Server和其他可能的系统中实现的聚集索引(行按索引列的顺序进行物理存储)在Oracle中并不存在。我相信,集群与块和表的组织方式有关 Oracle确实有索引组织的表,这些表在物理上是等效的,但使用它们的频率要低得多,因为查询优化器的工作方式不同 我能找到的最接近身份识别问题的答案是尝试以下方法:
SELECT IOT_TYPE FROM user_tables
WHERE table_name = '<your table name>'
我的10g实例相应地报告IOT或null。索引组织的表必须在主键上组织。当主键是序列生成的值时,这通常是无用的,甚至是适得其反的,因为同时插入会使同一块发生冲突
单表集群可用于对相同数据库块中具有相同列值的数据进行分组。但是他们没有订购。没有订单就没有订单。您需要按列a从SELECT*表格顺序中选择,其中rownum<100