欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

guid跟sequence做主鍵的比較

系統(tǒng) 2119 0

今天上班,發(fā)現(xiàn)一個同事用oracle的sys_guid()來做從一個表中隨機獲取6條記錄:
select * from (select * from tablename order by sys_guid()) where rownum < 7;
看得出來是先創(chuàng)建guid,然后將表記錄按照這個guid排序,再從中取頭6條。
數(shù)據(jù)庫主鍵用guid我倒是見過,這樣用作取隨機數(shù)倒是頭一次碰上。

立刻又想到oracle用guid作主鍵,跟sequnce比較哪個更好。google中還是找到了一篇文章說的比較好:

http://sgsoft.itpub.net/post/28147/270097

?

最近又有朋友爭論起 SYS_GUID sequence 誰做主鍵更合適的問題。下面我以一個案例說明一下,兩者在實際應用中的情況。以下內容純屬個人研究,觀點亦僅限于本案例

記得A項目組是一個物流管理系統(tǒng),后臺采用了Oracle數(shù)據(jù)庫。在系統(tǒng)中的核心表托運單表中,關于主鍵采用何種數(shù)據(jù)類型,是 sequence 還是用 GUID 大家起了爭論。

從網(wǎng)絡搜索得到的結論看,一般的意見總結為:
1.
SYS_GUID()比sequence復雜;
2.SYS_GUID做主鍵,則表、索引存儲開銷多;
3.SYS_GUID索引查詢比sequence慢;
下面對SYS_GUID和Sequence做主鍵的情況進行以下對比.
edl@PISC> select count(*) from all_objects;

COUNT(*)

----------

50231

已用時間 : 00: 00: 02.52

創(chuàng)建下列對象:

create table tsg as select RAWTOHEX(sys_guid()) sgid,a.* from all_objects a;

create SEQUENCE seq_tsg;

create table tsg2 as select seq_tsg.nextval,a.* from all_objects a;

空間比較

現(xiàn)在這兩個表:tsg和tsg2擁有的行數(shù)相同,但大小不同:

行數(shù)

Number Extents

Size in bytes

索引大小

TSG(SYS_GUID主鍵)

50231

23

8388608

3145728

TSG2(Sequence主鍵)

50231

21

6291456

917504

換言之 相同條件下 使用 SYS_GUID 做主鍵比用 Sequence 做主鍵 ,表 多消耗了空間 2097152 byte, 索引多消耗 2228224 byte, 平均每行多消耗 86.1 byte.

考慮到生產(chǎn)環(huán)境下 , 每天 5 萬條記錄 , 則一年 365*50000=18250000 條記錄 , 則理論上需要多耗費空間約合 1.43GB 存儲空間 . 這些空間對磁盤消耗而言可以忽略不計,對內存仍然是有一定影響的,但就當前的服務器能力而言,影響有限,如果對表進行合理分區(qū)后,這種影響可以降低至極低。

執(zhí)行計劃比較

比較唯一查詢時的執(zhí)行計劃 :

TSG 執(zhí)行 :

select owner

from tsg

where sgid = 'F36C09B7A7A84297995352D2409EB40E'

TSG2 執(zhí)行 :

select owner

from tsg2

where sgid = 99

執(zhí)行計劃比較如下 :

統(tǒng)計信息對比 :

從以上統(tǒng)計信息看 , 執(zhí)行計劃相同。
可以預料到的是 , 由于使用 SYS_GUID 做主鍵 , 比較的是字符串 , 故耗費 CPU 要高些 , 因此 ,logical reads 要高些 , 至于 Physical Readers 居然低一些 , 就不知道原因了(實際上二者基本都沒有產(chǎn)生大量的物理讀) , 估計是我的測試環(huán)境 Db Cache 太小的緣故 .

對于響應時間 , 這應該是計算機環(huán)境產(chǎn)生的影響 , 不能說明問題,這兩條語句響應都很快 , 小于 0.02 .

小結

從實踐來看 , 使用 SYS_GUID() 做主鍵的優(yōu)點多于負面影響。特別是在多個數(shù)據(jù)庫數(shù)據(jù)集成時 ,GUID 的優(yōu)點顯而易見 . A項目最終沒有采用客戶定義的“貨單唯一序號”作為主鍵,也是出于關系數(shù)據(jù)庫設計的法則約定:“主鍵不要代表任何意義”。

綜上所述, SYS_GUID 做主鍵:

SYS_GUID sequence 復雜 === è 有限范圍的正確 :由于 SYS_GUID RAW 類型的,做主鍵是,需要使用 RAWTOHEX 或者 HEXTORAW 類的函數(shù)轉換,若直接使用,則需要建立函數(shù)索引等。但這種復雜性往往在前端業(yè)務系統(tǒng)中體現(xiàn)不出,主鍵常常作為隱含的唯一 ID 去標識對象,而不顯示出來(或者不手工操作它,因為它無意義)。

SYS_GUID 做主鍵存儲開銷大 = è 不需要評估系統(tǒng)規(guī)模:如今存儲非常便宜,內存也足夠大,如果 2 千萬條記錄增加不到1.5G內存的話,當前普通的服務器已經(jīng)可以承受,如果進行合理分區(qū),則影響可以降低到極低。當然,如果您的服務器資源很緊張,那恐怕得放棄使用SYS_GUID

SYS_GUID 做主鍵查詢比 sequence è 不正確:實踐證明,二者是一樣的。

?

guid跟sequence做主鍵的比較


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产三级在线精品男人的天堂 | 亚洲高清视频一区 | 色吧欧美| 成人涩涩屋福利视频 | 欧美精品一区二区在线观看 | 欧洲成人免费视频 | 4438激情网| 日韩中文字幕在线播放 | 久久久久久亚洲精品 | 国产精品久久久久久久久久免费 | 一级特黄aaa免费 | 色天天天天综合男人的天堂 | 91在线观看网站 | 日韩免费一区二区 | 男女视频在线 | 中文字幕亚洲欧美日韩在线不卡 | 国产成人啪精品视频免费网站软件 | 无码免费一区二区三区免费播放 | 成人免费视频网站在线观看 | 手机日韩看片 | 久久精品小视频 | 国产合集福利视频在线视频 | 国产日产亚洲欧美综合另类 | 日韩精品在线视频 | 国产一级大片在线观看 | 欧美日韩综合精品一区二区三区 | 在线高清中文字幕 | 国模无水印一区二区三区 | 91精品国产一区二区三区蜜臀 | 91精品福利| 欧美在线观看视频一区 | 欧美另类69xxxxx免费 | 久久久久国产亚洲日本 | 亚州激情| 欧美日韩一区二区中文字幕 | av在线官网 | 亚洲乱码在线卡一卡二卡新区 | 色诱成人免费观看视频 | 一区二区三区免费在线 | 性欧美26uuu在线观看 | 国产欧美一区二区三区精品 |