二是如果視圖中包含Group By語句的話,在最好不要採用索引檢視表。雖然Group
By語句需要對資料進行彙總操作。但是他是高基數度的資料彙總。高基數度表示健包含許多不同的值。如需要採用Group
By語句對數以萬計的使用者資料進行分組,則這個分組對象的數值會很大。這個使用者的數量就是基數度。唯一鍵具有可能的最高基數度,因為每個鍵具有不同的值。索引檢視表通過減少查詢必須訪問的行數來提高效能。如果視圖結果集中的行數像基表中的行數那麼多,那麼使用視圖獲得的效能收益微乎其微。
三、 索引檢視表的幾個典型應用。
筆者在這雷根據自己的資料庫設計經驗,談談索引檢視表的兩個主要應用。希望這兩個例子能夠給大家帶來一定的啟發。
如某個商品零售企業,其在不同的地方有多個零售門店。為了便於管理,不同的零售門店都採用獨立的資料庫表來記錄他們的銷售情況。到月底的時候,需要對各個,門店的銷售記錄進行匯總,最終要統計在一張表中。此時,該如何處理呢?通常情況下,是先對各個門店的銷售情況進行匯總,統計出每個類別的銷售金額。然後再把各個表的內容進行串連,放在同一張報表中。如果從資料庫設計的角度講,那麼就是先對每張銷售情況表進行彙總操作,然後再利用Union語句把它們串連起來。Union語句就是將兩個SQL語句的結果合并起來。如要實現以上目的,我們可以通過SQL1
語句 Uinon
SQL語句2這種方式實現目的。但是,如果這些資料用於決策分析系統,每次用到的時候都需要重新查詢,就會大大的增加資料庫的查詢負擔。為此,就要建立索引檢視表。不過可惜的是,索引檢視表不支援Uinon操作符。那該如何處理呢?通常情況下,筆者都是這麼做的。第一步先對每個門店的銷售表進行匯總統計,此時可以利用索引檢視表來提高查詢的速度。第二步再用SQL語句來查詢這幾個索引檢視表中的資料並利用Uinon語句進行串連。也就是說,不直接從資料庫基表中查詢資料進行串連,而是從索引檢視表中進行串連。這雖然不能夠提高Uinon操作的速度,但是因為每個表的彙總操作時間縮短了,那麼其Uinon串連的時間相對來說,也就縮短了。
再如,現在各個門市店的銷售情況都是在獨立的SQL資料庫中記錄。然後在季末或者年末需要它們他們的資料連線起來。此時,又該如何處理呢?基本上跟上面的操作步驟類似。第一步統計每個資料庫中的銷售情況,對某些資料進行匯總操作。第二步就利用Union等操作符把它們的結果串連起來。但是由於索引檢視表不能夠同時引用多個資料庫中的表,所以不能夠設計單個索引檢視表來完成這項任務。筆者的做法是,先在每個資料庫中建立一張索引檢視表,來統計這些銷售情況,即對每個資料庫單獨的執行彙總操作。然後再通過串連操作把它們的結果串連起來。這個跟上面的一樣,索引檢視表並不能夠直接提高串連操作的效能。他也是通過縮短各個資料庫系統彙總操作的時間來實現縮短整個串連操作時間的目的。所以,其串連操作的總體速度會加快。
四、 如何建立索引檢視表?
其實,索引檢視表的建立非常簡單。只需要在建立視圖的時候,加入一個WITH
SCHEMABINDING的關鍵字即可。所以,要建立索引檢視表不難。其最大的難度還在於資料庫工程師需要根據實際的情況,來判斷是否需要採用索引檢視表。即需要應用情境,來分析此時採用索引檢視表能夠改善視圖的效能。