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