再议《反驳 吕震宇的“小议数据库主键选取策略(原创)” 》
前天發(fā)表了篇文章叫《小議數(shù)據(jù)庫(kù)主鍵選取策略(原創(chuàng))》,隨即有網(wǎng)友提出了反駁意見《反駁 呂震宇的“小議數(shù)據(jù)庫(kù)主鍵選取策略(原創(chuàng))” 》,看到后,我又做了做實(shí)驗(yàn),在這里將實(shí)驗(yàn)結(jié)果以及我的思考再向大家匯報(bào)一下:
首先感謝twodays提出意見,說實(shí)在的,關(guān)于COMB與GUID的效率差異是否有10到30倍我沒有做實(shí)驗(yàn),我會(huì)在以后掌握確切數(shù)據(jù)后修改這個(gè)結(jié)果。twodays的實(shí)驗(yàn)我做了,在我的機(jī)器上(P IV 2.0G,512M DDR400內(nèi)存)實(shí)驗(yàn)結(jié)果如下:
int類型為主鍵的表插入開始時(shí)間:07 19 2004? 8:19PM
int類型為主鍵的表插入結(jié)束時(shí)間:07 19 2004? 8:19PM
int類型為主鍵的表插入共用時(shí)間:5600毫秒
?
GUID(聚簇索引)類型為主鍵的表插入開始時(shí)間:07 19 2004? 8:19PM
GUID類型(聚簇索引)為主鍵的表插入結(jié)束時(shí)間:07 19 2004? 8:19PM
GUID類型(聚簇索引)為主鍵的表插入共用時(shí)間:6030毫秒?
?
GUID(非聚簇索引)類型為主鍵的表插入開始時(shí)間:07 19 2004? 8:19PM
GUID類型(非聚簇索引)為主鍵的表插入結(jié)束時(shí)間:07 19 2004? 8:19PM
GUID類型(非聚簇索引)為主鍵的表插入共用時(shí)間:5746毫秒?
?
COMB類型為主鍵的表插入開始時(shí)間:07 19 2004? 8:19PM
COMB類型為主鍵的表插入結(jié)束時(shí)間:07 19 2004? 8:19PM
COMB類型為主鍵的表插入共用時(shí)間:6066毫秒
從中看到似乎COMB是最慢的。但是這又有多少是因?yàn)橛?jì)算COMB數(shù)據(jù)而造成的呢?
而且,作為聚簇索引與非聚簇索引的概念,我想僅僅MSDN中的一段話是不足以說明問題的。我想從以下幾個(gè)方面重新論述一下:
一、主鍵的作用:
“反駁”中有這樣兩句話:“采用非聚簇索引也有不方便的地方,那就是不能排序了”,“如果只是為了需要一個(gè)唯一標(biāo)示符來做為主鍵,并且在這個(gè)字段上不需要做什么排序呀,范圍對(duì)比等操作的話,那么我們可以放心大膽的使用GUID來做為主鍵”。那么主鍵的作用是什么呢?我認(rèn)為主鍵有這么幾個(gè)作用:
- 實(shí)現(xiàn)實(shí)體完整性約束,確保不會(huì)出現(xiàn)重復(fù);
- 在參照完整性中充當(dāng)被參照對(duì)象,需要與外鍵進(jìn)行連接,當(dāng)然從優(yōu)化角度出發(fā)也需要排序了;
- 在編程建立業(yè)務(wù)實(shí)體對(duì)象時(shí),是一個(gè)很好的檢索出發(fā)點(diǎn);
- 在刪除、更新操作時(shí)可以出現(xiàn)在WHERE短語(yǔ)中表示操作的對(duì)象(顯然又會(huì)進(jìn)行檢索)。
所以,主鍵一個(gè)必不可少的功能就是排序,提高檢索效率。不過我認(rèn)為“反駁”中有一點(diǎn)搞錯(cuò)了,那就是在排序問題上,實(shí)際上非聚簇索引主鍵在排序上不輸給聚簇索引主鍵多少(這一點(diǎn)請(qǐng)看論述二)。
二、聚簇索引與非聚簇索引的本質(zhì)區(qū)別是什么
因?yàn)椤胺瘩g”中僅僅做了插入實(shí)驗(yàn),所以我認(rèn)為不足以說明問題。很多人并沒有真正了解聚簇索引與非聚簇索引的本質(zhì)區(qū)別,以至于對(duì)實(shí)驗(yàn)結(jié)果產(chǎn)生誤解。為此我新寫了一篇文章《聚簇索引與非聚簇索引的區(qū)別以及SQL Server查詢優(yōu)化技術(shù)》,在這里詳細(xì)進(jìn)行了論述,看完后,很多事情也就不言自明了。
三、應(yīng)當(dāng)如何設(shè)計(jì)實(shí)驗(yàn)檢測(cè)COMB與GUID的效率問題
設(shè)計(jì)一個(gè)實(shí)驗(yàn)應(yīng)當(dāng)能夠準(zhǔn)確衡量被測(cè)試的內(nèi)容,盡可能少的減少其它因素帶來的偏差。我認(rèn)為“反駁”中的實(shí)驗(yàn)僅僅測(cè)試了插入性能,而且沒有把計(jì)算COMB的造成的性能損失因素排除在外,另外主鍵與外鍵連接時(shí)的性能沒有測(cè)試,排序性能也沒有測(cè)試。昨天晚上我重新設(shè)計(jì)了實(shí)驗(yàn),并得到了新的實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)過程以及實(shí)驗(yàn)結(jié)果會(huì)隨后公布(這兩天正在忙競(jìng)聘)。
轉(zhuǎn)載于:https://www.cnblogs.com/zhenyulu/archive/2004/07/20/25816.html
總結(jié)
以上是生活随笔為你收集整理的再议《反驳 吕震宇的“小议数据库主键选取策略(原创)” 》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mspx
- 下一篇: linux cmake编译源码,linu