[20191225]主键使用uuid优缺点.txt --//链接:https://www.cnblogs.com/jpfss/p/11506824.html UUID UUID含义是通用唯一识别码 (Universally Unique Identifier),指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯 一的。通常平台会提供生成的API。换句话说能够在一定的范围内保证主键id的唯一性。 优点 出现数据拆分、合并存储的时候,能达到全局的唯一性 缺点 影响插入速度, 并且造成硬盘使用率低 uuid之间比较大小相对数字慢不少, 影响查询速度。 uuid占空间大, 如果你建的索引越多, 影响越严重 --//链接:https://blog.csdn.net/yinni11/article/details/79897696 现在大家应该对UUID有一个比较直观的认识了,我们来看看UUID的优缺点分别是什么。 优点: 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。 保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。 在oracle做数据迁移的时候不会因为表的sequence不连续而出现问题 缺点: 比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。 使用UUID后,URL显得冗长,不够友好。 下面针对上述UUID的缺点说说我的看法,比较占地方这个缺点我不是很在乎,现在最不值钱的就是硬盘了,略过此条缺点无妨,但需要注 意的一点数据在索引的时候效率会随着体积的增加而降低。至于说使用UUID后,URL显得不友好,我觉得这多少是你的INT情结造成的惯性 思维,其实,和INT类型相比,UUID才是最自然的主键选择,注意,我这里用的是自然这个形容词,仔细体会一下你能理解我的意思。另 外,很多时候,URL本身就不需要友好,比如,一个电子商务网站,按照INT友好的URL说法,她的订单URL大概是下面这个形式的: /order.php/id/123,我要说明的是,这样是很友好,但是有些太友好了,友好的甚至不安全,比如说,我早晨下一个订单,发现URL是 /order.php/id/1000,晚上再下一个订单发现URL是/order.php/id/2000,那么我就可以估计出此网站一天的订单数大致是1000左右,甚 至能大体估计出它的销售额,而这些数据往往都是重要的商业秘密。使用UUID就没有这个顾虑。 --//我个人并不同意这个观点,最不值钱的就是硬盘,某种角度讲这个观点确实没错,但是对方明显没有考虑日志,归档,索引,表这些汇 --//总起来,增加确实很快的.而且实际上许多开发不会选择raw(16)类型,因为这样会存在隐式转换,编程很麻烦,而是更多的选择 --//varchar2(32)类型保存. SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production create table t ( a raw(16),b varchar2(32)); insert into t select sys_guid(), sys_guid() from dual ; SCOTT@book> select * from t; A B -------------------------------- -------------------------------- 9A7EBAE480254756E0534E64A8C05A8C 9A7EBAE480264756E0534E64A8C05A8C ~~~~~~~~~~~~ --//不仔细会以为2个一样,实际上仅仅下划线最后5存在不同. SCOTT@book> select dump(a,16) c70 ,dump(b,16) c110 from t ; C70 C110 ---------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------- Typ=23 Len=16: 9a,7e,ba,e4,80,25,47,56,e0,53,4e,64,a8,c0,5a,8c Typ=1 Len=32: 39,41,37,45,42,41,45,34,38,30,32,36,34,37,35,36,45,30,35,33,34,45,36,34,41,38,43,30,35,41,38,43 --//前者占用16字节,后者32字节. SCOTT@book> select * from t where a='9A7EBAE480254756E0534E64A8C05A8C'; A B -------------------------------- -------------------------------- 9A7EBAE480254756E0534E64A8C05A8C 9A7EBAE480264756E0534E64A8C05A8C SCOTT@book> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 71cgtup50d8p8, child number 0 ------------------------------------- select * from t where a='9A7EBAE480254756E0534E64A8C05A8C' Plan hash value: 1601196873 --------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100)| | |* 1 | TABLE ACCESS FULL| T | 1 | 28 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / T@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(RAWTOHEX("A")='9A7EBAE480254756E0534E64A8C05A8C') --//可以发现发生隐式转换,这样开发不会选择raw类型来保存生成的uuid.意味者需要更大的空间保存信息. SELECT * FROM ( SELECT table_name, COUNT (*) FROM dba_tab_columns WHERE owner = 'XXXXXX' AND data_type = 'VARCHAR2' AND data_length = 32 GROUP BY table_name ORDER BY 2 DESC) WHERE ROWNUM <= 8; TABLE_NAME COUNT(*) --------------------- -------- XXX_ITEM_HIS 27 XXX_ITEM 25 XXX_PAYBOOK 22 XXX_AGEN 22 XXX_PAYBOOK_BACK3040 21 XXX_BATCH_TASK_DETAIL 20 XXX_PAYBOOK_UNSIGN 20 XXX_ITEMSHARE_HIS 19 --//XXX_ITEM_HIS有27个,XXX_ITEM有25个varchar2(32)类型.可想而知如果这些都是uuid的编码,消耗空间有多大,出现行链接迁移的可能 --//性有多大. set linesize 2000 column comments format a60 SELECT table_name, column_name, comments FROM DBA_col_COMMENTS WHERE owner = 'XXXXXX' AND table_name = 'XXX_ITEM' AND column_name IN (SELECT column_name FROM dba_tab_columns WHERE owner = 'XXXXXX' AND table_name = 'XXX_ITEM' AND data_type = 'VARCHAR2' AND data_length = 32); TABLE_NAME COLUMN_NAME COMMENTS ---------- ---------------- -------------------- XXX_ITEM XXXEMIDCODE 项目识别码 XXX_ITEM XXXITS 计量单位 XXX_ITEM XXXBID 收入科目Id XXX_ITEM XXXERID 经办人ID XXX_ITEM XXXAREDIRECTCODE 分成方向 XXX_ITEM XXXALTYPERCENT 滞纳金比例(%) XXX_ITEM XXXDCODE 父级识别码 XXX_ITEM XXXTSTYLECODE 预算管理方式代码 XXX_ITEM XXXAGSORTCODE 全国项目分类 XXX_ITEM XXX 主键 XXX_ITEM XXXTERCODE 变更类型代码 XXX_ITEM XXXYMODECODE 缴库方式代码 XXX_ITEM XXXCOMESORTCODE 收入类别代码 XXX_ITEM XXXAGSORTCODE 地方项目分类 XXX_ITEM XXXNDSNATURE 资金性质内码 XXX_ITEM XXXNDSNATURECODE 资金性质代码 XXX_ITEM XXXTCHKRGNID 终审通过的区划ID XXX_ITEM XXXDE 项目编码 XXX_ITEM XXXNID 维护区划ID XXX_ITEM XXXEMCODE 项目业务码 XXX_ITEM XXXVELCODE 层次码 XXX_ITEM XXXRTCODE 项目分类代码 XXX_ITEM XXXPCODE 审批属性代码 XXX_ITEM XXXNITEMIDCODE 全国项目识别码 XXX_ITEM XXXTLVLCODE 项目使用级次 已选择 25 行。 --//仅仅3-4个字段(XXXITS,XXXAREDIRECTCODE,XXXALTYPERCENT,XXXVELCODE,XXXTLVLCODE)可能不是保存uuid编码.可想如果剩下全部保 --//存uuid信息,32*20=640,不是一点点而是大量的空间. --//任何一项技术都有其优缺点,适用范围,如果滥用未必带来好的结果.适当的使用才能带来好处.而不是到处都用uuid保存主键信息. --//你可以看如下链接的一些测试,对方还是使用raw(16)类型的,如果是varchar2(32)消耗更大. https://dfitzjarrell.wordpress.com/2016/12/21/do-you-have-a-key/
[20191225]主键使用uuid优缺点.txt
来源:这里教程网
时间:2026-03-03 14:45:01
作者:
编辑推荐:
- [20191225]主键使用uuid优缺点.txt03-03
- ORACLE异常处理03-03
- RMAN的使用(四)03-03
- RMAN的使用(二)03-03
- RMAN的使用(三)03-03
- RMAN的使用(五)03-03
- RMAN的使用(六)03-03
- RMAN的使用(八)03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- RMAN的使用(八)
RMAN的使用(八)
26-03-03 - 华为手机的七种截屏方法,你都知道吗?第一种可是要看机型的
华为手机的七种截屏方法,你都知道吗?第一种可是要看机型的
26-03-03 - RMAN的使用(七)
RMAN的使用(七)
26-03-03 - alter database disable thread 2
alter database disable thread 2
26-03-03 - 原来手机隐藏着"望远镜"功能,自带50倍变焦!厉害了
原来手机隐藏着"望远镜"功能,自带50倍变焦!厉害了
26-03-03 - 微信右上角图标有什么用?测好友+发长图+长视频,一学就会
微信右上角图标有什么用?测好友+发长图+长视频,一学就会
26-03-03 - [20191227]别把数据库当作垃圾场.txt
[20191227]别把数据库当作垃圾场.txt
26-03-03 - 基于函数计算 + TensorFlow 的 Serverless AI 推理
- 活体检测
活体检测
26-03-03 - 令人烦恼的弹窗广告,已被人民日报痛批!如何才能屏蔽弹窗广告呢
令人烦恼的弹窗广告,已被人民日报痛批!如何才能屏蔽弹窗广告呢
26-03-03
