我正在尝试生成排序的GUID作为Oracle中的主键。在SQL Server中,我可以使用以下方法之一对物理行进行排序
我已经搜索了等效的Oracle,但是找不到解决方案。我知道有没有一种方法可以在Oracle数据库中创建自动递增的Guid主键?,但没有指示是否SYS_GUID()
已排序。
如何在Oracle中创建顺序主键?
如果要创建GUID SYS_GUID()
,则应使用该GUID ,您可以根据链接的问题在表中创建它。从文档中尚不清楚是否SYS_GUID()
在增加。这也许是,但是这不是一个真正的声明赋予信任。
问题的下一部分(和一些评论)不断询问集群主键。在Oracle中,这种概念与在SQL Server和Sybase中的存在方式不同。Oracle确实已建立索引组织表(IOT) ...
...以B树索引结构的变体形式存储的表...行存储在该表的主键上定义的索引中。B树中的每个索引条目还存储非键列值。因此,索引是数据,数据是索引。
物联网有很多用途,但是请记住,由于“性能原因”而要更改磁盘上数据库的物理结构。您正在使用所有具有消极和积极方面的东西来完成所有过早的优化。阅读文档,并确保这是您要执行的操作。
通常,只有在您不关心DML性能时,而是在您进行很多范围扫描时,或者您需要按主键排序时,才使用IOT。创建IOT的方式与使用普通表相同,但是由于所需的所有内容现在都已成为表的一部分,因此所有内容都将包含在表定义中:
create table test_table (
id raw(32) default sys_guid()
, a_col varchar2(50)
, constraint pk_my_iot primary key (id)
) organization index;
值得注意的是,即使使用物联网,也必须使用显式的ORDER BY才能保证退回订单。但是,由于这种存储方式,Oracle可以列出一些捷径:
select *
from ( select *
from test_table
order by id )
where rownum < 2
与所有测试一样,不要假设这是您想要的结构。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句