索引是http://www.vxbq.cn/db/系統(tǒng)重要的feature,不管是傳統(tǒng)的關(guān)系型http://www.vxbq.cn/db/還是時(shí)髦的NoSQLhttp://www.vxbq.cn/db/,它攸關(guān)查詢性能,因此在設(shè)計(jì)http://www.vxbq.cn/db/時(shí)需要細(xì)加考量。但是,Lotus Notes隱藏技術(shù)底層,以用戶界面為導(dǎo)向,尋求快速開(kāi)發(fā)的理念,使得“索引”鮮有開(kāi)發(fā)人員提及,乃至了解。大家只論及視圖,而當(dāng)不同的人在不同的場(chǎng)合說(shuō)“視圖”時(shí),所指各異。普通用戶如果用視圖1詞,指的是顯示1行行信息的列表;開(kāi)發(fā)人員口里的視圖,是http://www.vxbq.cn/db/里的1類設(shè)計(jì)元素。這類設(shè)計(jì)元素,依照Lotus Notes的風(fēng)格,將視圖層的設(shè)計(jì)與數(shù)據(jù)層的定義混合在1起,前者例如列的字體、色彩、寬度;后者包括選擇文檔,提取字段和計(jì)算列內(nèi)容,定義排序、分類、總計(jì)等等。如果單純斟酌Notes的http://www.vxbq.cn/db/部份,后者的數(shù)據(jù)定義才是有關(guān)主題的。
Notes利用程序常常在使用了1段時(shí)間后,也就是在http://www.vxbq.cn/db/變大,用戶變多后,變得很慢。其中1個(gè)重要因素就是視圖,打開(kāi)利用程序、新建修改文檔、履行代理都可能或明或暗地打開(kāi)視圖。這些時(shí)候,正是索引隱藏在視圖背后影響著性能。
在主流開(kāi)發(fā)所用的技術(shù)組合中,http://www.vxbq.cn/db/是獨(dú)立的1塊,開(kāi)發(fā)人員需用與編寫業(yè)務(wù)邏輯時(shí)所用的語(yǔ)言不同的專業(yè)知識(shí)來(lái)設(shè)計(jì)和定義數(shù)據(jù),所以才會(huì)衍生出專精于此的http://www.vxbq.cn/db/管理員。在Lotus Notes利用程序中,http://www.vxbq.cn/db/、業(yè)務(wù)邏輯和用戶界面的開(kāi)發(fā)緊密耦合,在大公司里雖然也有人專職保護(hù)http://www.vxbq.cn/server/,部署和更新http://www.vxbq.cn/db/,但是他們1般不會(huì)檢查http://www.vxbq.cn/db/的設(shè)計(jì)來(lái)優(yōu)化性能。http://www.vxbq.cn/db/的性能是程序開(kāi)發(fā)人員的份內(nèi)之事,而實(shí)際上,若非經(jīng)驗(yàn)豐富的http://www.vxbq.cn,利用程序慢到很多用戶沒(méi)法忍耐,性能在Noteshttp://www.vxbq.cn開(kāi)發(fā)時(shí),幾近不會(huì)被斟酌。http://www.vxbq.cn/db/慢只會(huì)被歸咎于文檔太多、附件太大、Noteshttp://www.vxbq.cn/db/本來(lái)就如此。許多老http://www.vxbq.cn開(kāi)發(fā)的利用程序里,同1類文檔僅僅是為了分類順序的不同就建了10來(lái)個(gè)視圖,每一個(gè)視圖10多210個(gè)列,67列為分類,其它幾近全設(shè)置了排序。文檔數(shù)量1旦增多,如此設(shè)計(jì)將嚴(yán)重影響性能,而在設(shè)計(jì)者眼里,只是為了方便用戶并且是Notes便利性的證明。這樣的視圖設(shè)計(jì)和其功能濫用,固然責(zé)任不全在http://www.vxbq.cn身上,引導(dǎo)他們這樣做的Notes的開(kāi)發(fā)理念、幫助文檔都難辭其咎。
說(shuō)了這么長(zhǎng)的開(kāi)場(chǎng)白,現(xiàn)在就來(lái)討論索引及其和利用程序性能的關(guān)系。先概括關(guān)系型http://www.vxbq.cn/db/里的索引的作用,以作為Notes視圖索引的對(duì)比。簡(jiǎn)單地說(shuō),索引就是在大量數(shù)據(jù)中為了快速查詢建立的從數(shù)據(jù)中某些有用的信息到這些信息所在位置的映照。字典前面的拼音和部首檢字表就是索引,更形象的例子是國(guó)外很多圖書的末尾都附有的索引,可以此查到重要的詞語(yǔ)出現(xiàn)的頁(yè)碼。http://www.vxbq.cn/db/里的記錄數(shù)量龐大,實(shí)際使用時(shí)又有找出符合各種各樣條件的記錄的需求。例如1個(gè)記錄了1百萬(wàn)條人員信息的表,包括姓名、生日、性別、地址、電話號(hào)碼等等信息。要從中找出姓趙的或電話號(hào)碼是26538941的人,如果沒(méi)有特別的幫助,http://www.vxbq.cn/db/系統(tǒng)只能逐行檢查記錄是不是符合條件,找到1條記錄平均所需讀取和檢查記錄的數(shù)量是N/2(N為記錄的總數(shù))。如果從記錄中提取電話號(hào)碼字段,排序,并且每條號(hào)碼指向?qū)?yīng)記錄在表中的位置,就建成了1個(gè)索引。此時(shí)再要查詢電話號(hào)碼是26538941的人,只需對(duì)索引利用2分查詢算法,工作量就會(huì)減少到log2(N)的級(jí)別,再加上從定位的索引行肯定和讀取原始數(shù)據(jù)行的1次操作。另外,由于索引的每行數(shù)據(jù)比原始記錄的每條要短很多,單次讀取本身也更快。索引的負(fù)面影響則是空間和保護(hù)本錢。索引的數(shù)據(jù)本身要占據(jù)空間,這很好理解。原始記錄更新(新增、修改和刪除)時(shí),索引自然也要隨著更新。索引的更新可以選擇與原始記錄同時(shí)、定時(shí)或在用到索引也就是查詢時(shí)再進(jìn)行,但不管如何,與沒(méi)有索引相比,都需要額外的計(jì)算。新增記錄時(shí),更新索引單純是性能上的開(kāi)消。修改和刪除時(shí),除非是對(duì)所有記錄,否則都有選擇條件,此時(shí)的索引正起到與查詢時(shí)一樣的幫助,而修改和刪除后更新索引則是開(kāi)消,由于前者的好處更大,所以合起來(lái)的效果1般對(duì)性能還是正面的(除非記錄數(shù)量不大或索引數(shù)量過(guò)量)。
在《從視圖索引說(shuō)Noteshttp://www.vxbq.cn/db/(下)》里將接著詳細(xì)討論Notes視圖索引。