[20120319]使用sys_guid()做為主鍵的問題.txt
最近一段時間都在最佳化一個專案,發現其表的主鍵是透過sys_guid()生成的,這樣的結果就是主鍵以及外來鍵在表中佔的比例很大。
SELECT count(*) FROM dba_tab_columns WHERE wner = 'XXXX';
COUNT(*)
----------
1238
1 row selected.
SELECT count(*) FROM dba_tab_columns WHERE wner = 'XXXX' AND data_type = 'VARCHAR2' AND data_length = 36;
COUNT(*)
----------
453
1 row selected.
--說明一下sys_guid() 生成的32位的,開發在中間插入'-'做為分隔,這樣data_length=36。
我粗略估算了一下,僅僅是表,這些主鍵佔用的空間大約40-50%。如果包括索引,可以到達60-65%。
我還仔細看了資料結構,發現這個專案主外來鍵定義很嚴謹。 真無法想象這個專案以後會怎麼樣?講句老實化,使用它最大的好處是簡單,其它根本看不出任何優點。
我google,發現UUID的相關資訊:
通用唯一識別碼 (Universally Unique Identifier, UUID) 是一個軟體建構的標準,亦為自由軟體基金會 (Open Software Foundation, OSF) 的組織在分散式計算環境 (Distributed Computing Environment, DCE) 領域的一部份。
UUID 的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人衝突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重複問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。另外我們也可以在 e2fsprogs 套件中的 UUID 函式庫找到實作。
定義
一組 UUID,是由一串 16 位元組(亦稱 16 位元組,或 128 位元)的16進位數字所構成,是故UUID理論上的總數為216 x 8=2128,約等於3.4 x 1038。也就是說若每奈秒產生1兆個UUID,要花100億年才會將所有UUID用完。
UUID的標準型式包含32個16進位數字,以連字號分為五段,形式為8-4-4-4-12的32個字元。範例;
550e8400-e29b-41d4-a716-446655440000
UUID亦可刻意重複以表示同類。例如說微軟的COM中,所有元件皆必須實作出IUnknown介面,方法是產生一個代表IUnknown的UUID。無論是程式試圖存取元件中的IUnknown介面,或是實作IUnknown介面的元件,只要IUnknown一被使用,皆會被參考至同一個ID:00000000-0000-0000-C000-000000000046。
原來在linux中也有使用。
比如
# tune2fs -l /dev/sda2
tune2fs 1.35 (28-Feb-2004)
Filesystem volume name: /
Last mounted on:
Filesystem UUID: 550851f8-68ac-4fc3-a454-4359befb3dbc
Filesystem magic number: 0xEF53
也可以使用uuidgen命令生成uuid(在e2fsprogs軟體包中):
# uuidgen
ddbb2ded-bdeb-4b6d-b6f5-8aa304e15eb6
SELECT count(*) FROM dba_tab_columns WHERE wner = 'XXXX';
COUNT(*)
----------
1238
1 row selected.
SELECT count(*) FROM dba_tab_columns WHERE wner = 'XXXX' AND data_type = 'VARCHAR2' AND data_length = 36;
COUNT(*)
----------
453
1 row selected.
--說明一下sys_guid() 生成的32位的,開發在中間插入'-'做為分隔,這樣data_length=36。
我粗略估算了一下,僅僅是表,這些主鍵佔用的空間大約40-50%。如果包括索引,可以到達60-65%。
我還仔細看了資料結構,發現這個專案主外來鍵定義很嚴謹。 真無法想象這個專案以後會怎麼樣?講句老實化,使用它最大的好處是簡單,其它根本看不出任何優點。
我google,發現UUID的相關資訊:
通用唯一識別碼 (Universally Unique Identifier, UUID) 是一個軟體建構的標準,亦為自由軟體基金會 (Open Software Foundation, OSF) 的組織在分散式計算環境 (Distributed Computing Environment, DCE) 領域的一部份。
UUID 的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人衝突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重複問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。另外我們也可以在 e2fsprogs 套件中的 UUID 函式庫找到實作。
定義
一組 UUID,是由一串 16 位元組(亦稱 16 位元組,或 128 位元)的16進位數字所構成,是故UUID理論上的總數為216 x 8=2128,約等於3.4 x 1038。也就是說若每奈秒產生1兆個UUID,要花100億年才會將所有UUID用完。
UUID的標準型式包含32個16進位數字,以連字號分為五段,形式為8-4-4-4-12的32個字元。範例;
550e8400-e29b-41d4-a716-446655440000
UUID亦可刻意重複以表示同類。例如說微軟的COM中,所有元件皆必須實作出IUnknown介面,方法是產生一個代表IUnknown的UUID。無論是程式試圖存取元件中的IUnknown介面,或是實作IUnknown介面的元件,只要IUnknown一被使用,皆會被參考至同一個ID:00000000-0000-0000-C000-000000000046。
原來在linux中也有使用。
比如
# tune2fs -l /dev/sda2
tune2fs 1.35 (28-Feb-2004)
Filesystem volume name: /
Last mounted on:
Filesystem UUID: 550851f8-68ac-4fc3-a454-4359befb3dbc
Filesystem magic number: 0xEF53
也可以使用uuidgen命令生成uuid(在e2fsprogs軟體包中):
# uuidgen
ddbb2ded-bdeb-4b6d-b6f5-8aa304e15eb6
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-718928/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 操作hibernate多主鍵的問題?
- 操作hibernate多主鍵的問題?(2)
- 基於關鍵詞及問題主題的問題相似度計算
- MySQL自增主鍵跳號問題MySql
- 不要使用業務鍵作為資料庫主鍵資料庫
- oracle 序列值導致的主鍵衝突問題Oracle
- [20120319]一條sql語句的優化.txtSQL優化
- 多對一(主鍵)關係,create問題
- hibernate複合主鍵查詢問題
- MySQL5.5加主鍵鎖讀問題MySql
- [求助]Hibernate自增長主鍵的設定問題和事務問題
- MySQL的主鍵和欄位型別問題總結MySql型別
- 資料庫自增主鍵可能產生的問題資料庫
- 注意:Oracle中的聯合主鍵查詢問題(轉)Oracle
- GoldenGate MSSQL Oracle的主鍵問題導致的錯誤GoSQLOracle
- 記SqlSugar ORM框架之找不到主鍵問題SqlSugarORM框架
- 『提問』聯合主鍵(compsite-id)所引起的問題
- [20160704]NULL與主外來鍵問題.txtNull
- 關於資料庫表記錄主鍵生成的問題?資料庫
- [20191225]主鍵使用uuid優缺點.txtUI
- 主鍵為聯合主鍵時,索引B+樹結構索引
- [20160910]sqlldr使用問題.txtSQL
- 小議SQL Server主鍵和自動編號問題SQLServer
- Gensim做中文主題模型(LDA)模型LDA
- 使用主題檔案(包含CSS檔案)時遇到的問題CSS
- MyBatis在Oracle中插入資料並返回主鍵的問題解決MyBatisOracle
- 主鍵與主鍵索引的關係索引
- [20180420]windows下使用cmd的小問題.txtWindows
- 怎樣成為解決問題的高手?——關於問題解決的關鍵4步驟
- jsp無法使用bean的問題 等到解決問題為止!!!!JSBean
- postgresql copy UNICODE txt 問題。SQLUnicode
- mongodb shell不能使用退格鍵的問題解決方案MongoDB
- [20121020]主外來鍵約束以及NULL問題.txtNull
- 【MySQL】gh-ost改雙主表結構主鍵衝突問題MySql
- [20160113]sqlplus使用問題.txtSQL
- Oracle主鍵與複合主鍵的效能分析Oracle
- db4o 解決自動生成主鍵的問題 分享下初步想法
- 芻議IPv6的安全問題關鍵主機易被駭客看中(轉)