我们将使用UUID作为主键字段。在Oracle表和hibernate(JPA)映射中保存UUID的变体是什么? Varchar2 \ String在我看来很贵。 UUID作为主键的缺陷是什么?
答案 0 :(得分:1)
您也可以使用RAW(16)
。从空间使用的角度来看,它是最好的解决方案,但你仍然“浪费”了很多空间。
AFAIK没有陷阱,但对于有Oracle经验的人来说,这是非自然的解决方案。
PS:占用相同空格的数字id将有30个有效数字。
PS:您可以进行测试,创建一个具有数百万行的表,一旦将NUMBER作为PK,第二次将UUID作为PK。然后比较PK索引(段)的大小,叶块的数量,......
SQL> create table t1 as select level as N from dual connect by level <=1000000;
SQL> create table t2 as select sys_guid() as N from dual connect by level <=1000
000;
SQL> create unique index ix1 on t1(n);
SQL> create unique index ix2 on t2(n);
SQL> exec dbms_stats.gather_table_stats('SYS','T1');
SQL> exec dbms_stats.gather_table_stats('SYS','T2');
SQL> select bytes, segment_name from dba_segments where segment_name in ('IX1',
'IX2');
BYTES SEGMENT_NAME
---------- --------------------
17825792 IX1
31457280 IX2
SQL> select leaf_blocks, index_name from dba_ind_statistics where index_name in
('IX1', 'IX2');
LEAF_BLOCKS INDEX_NAME
----------- ------------------------------
2087 IX1
3760 IX2