qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          談數(shù)據(jù)庫(kù)主鍵選取策略

            INT和GUID,究竟選誰(shuí)?

            關(guān)于數(shù)據(jù)庫(kù)主鍵的選取策略,大家都是在INT和GUID兩者中徘徊。忘了那些喋喋不休的爭(zhēng)論吧!畢竟魚(yú)與熊掌,不可兼得。在這篇文章中,我們不再關(guān)注它們的優(yōu)缺點(diǎn),自覺(jué)先行做點(diǎn)功課哦!

            如小標(biāo)題,如果真要選,我會(huì)選誰(shuí)?肯定地說(shuō),我會(huì)選GUID,又或者兩者都選上。后者情形下,使用GUID做主鍵、INT做小二,INT在業(yè)務(wù)層生成,這要即使重復(fù)了,也不礙事,且INT是要反饋給前端的,定時(shí)做一個(gè)防沖突檢測(cè)。如果讓用戶記憶或反饋那GUID字符串(去連接字符后32位),可以直接去跳樓了!

            INT和GUID,究竟誰(shuí)快?

            使用INT或GUID做主健,究竟誰(shuí)更快?為回答這個(gè)問(wèn)題,我們先看下面的表格內(nèi)容:

            解釋一下:

            1、uniqueidentifier存儲(chǔ)為二進(jìn)制值,為什么是16字節(jié)呢?0~f 共16 種表示,有16*16=256,也有2^8=256(值域?yàn)?~255),去掉四個(gè)連接字符,即表示為16字節(jié)。

            2、varchar和nvarchar屬變長(zhǎng)型,存儲(chǔ)時(shí)會(huì)增加一個(gè)int類型(四個(gè)字節(jié))記錄內(nèi)容長(zhǎng)度。

            3、nchar和nvarchar類型存儲(chǔ)為Unicode數(shù)據(jù),占用兩個(gè)字節(jié),所以字節(jié)數(shù)要算雙份。

            誰(shuí)會(huì)更快?

            1、勿庸置疑,INT肯定是最快的,甚至你會(huì)選擇int而不是bigint。

            2、其次,誰(shuí)會(huì)更快?當(dāng)選uniqueidentifier。

            3、項(xiàng)目中,選用了varchar、nchar、nvarchar中某一類型?只怕你會(huì)是神,不是人或妖。

            INT和GUID,誰(shuí)主沉浮?

            項(xiàng)目中,如果你是使用INT做主健,那么接下來(lái)的內(nèi)容可以直接略過(guò)?因?yàn)槟阋呀?jīng)得到了答案。

            寫(xiě)這篇隨筆的主要目的,是要告訴大家,使用GUID做主鍵時(shí),特別要注意索引與排序問(wèn)題。

            GUID做主鍵,字段類型為char(36),數(shù)據(jù)記錄索引與排序依據(jù)肯定是字符串的從左到右,即:12345678-0000-0000-0000-000000000000

            GUID做主鍵,字段類型為uniqueidentifier,數(shù)據(jù)記錄索引與排序依據(jù)將是后六字節(jié),即:00000000-0000-0000-0000-1234567890ab

            為什么會(huì)這樣?數(shù)據(jù)存儲(chǔ)為uniqueidentifier時(shí),會(huì)體現(xiàn)為SqlGuid 結(jié)構(gòu)。

            MSDN描述有:SqlGuid使用 SQL Server行為實(shí)現(xiàn)CompareTo,該行為只計(jì)算值的最后6個(gè)字節(jié)。Guid 計(jì)算全部 16 個(gè)字節(jié)。

            結(jié)束語(yǔ)

            為了驗(yàn)證所說(shuō),你可以這樣做:建表并添加uniqueidentifier字段類型,隨機(jī)插入幾萬(wàn)條記錄,然后觀察后十二位字符的排序情況,或參考下面截圖。

          posted on 2012-08-01 10:46 順其自然EVO 閱讀(911) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 柳州市| 阳西县| 金湖县| 临清市| 巴南区| 清水河县| 延安市| 中江县| 斗六市| 射阳县| 重庆市| 鄂伦春自治旗| 油尖旺区| 正蓝旗| 瑞昌市| 浙江省| 秦皇岛市| 同江市| 巩留县| 水城县| 湘潭市| 新余市| 吴桥县| 三台县| 北票市| 峨眉山市| 浦东新区| 太原市| 平舆县| 博乐市| 沂水县| 沙雅县| 龙泉市| 正安县| 巴马| 鄂尔多斯市| 托克托县| 高淳县| 封开县| 井研县| 桑日县|