1. 程式人生 > >《資料庫索引設計優化》讀書筆記(三)

《資料庫索引設計優化》讀書筆記(三)

分析:
如圖6.5所示,TABLE上欄位A有主鍵聚簇索引,欄位C有非聚簇索引。查詢謂詞中有欄位C的範圍條件,並且結果集按C排序。因為謂詞中只有欄位C有索引,所以在不新增新索引的前提下,不可能建立三星理想索引(不滿足第一顆星)。掃描現有的欄位C上的索引,可以消除排序,所以C上的索引本身滿足第二顆星。不增加額外的第三個索引,可以做的就是修改欄位C上的索引,以C作為索引字首,把查詢中其他欄位加入到現有的索引中,這樣可以最大化索引過濾(B = :B AND D = 1),而且這是一個寬索引,滿足第三顆星,只需訪問索引,避免回表。有了上面的分析,第一小問的答案就是索引(C,B,D,E,F),C後面的DB欄位順序可換,EF欄位順序可換。該索引有1個匹配列C,兩個過濾列B和D。掃描的是滿足C > :C的索引片,用B = :B和D = 1作為過濾條件。如果可以增加第三個索引,可以把等值謂詞作為索引字首,而範圍謂詞C正好是唯一的排序欄位,所以可以建立三星理想索引。第二小問的答案就是索引(B,D,C,E,F),其中BD的順序可換,EF的順序可換。這是一個三星索引,匹配列是BDC三列,掃描滿足B = :B AND D = 1 AND C > :C的索引片,同時消除額外的排序。 

6.2 假設1秒是我們可接受的執行時間,並且我們不願增加一個新索引。對於上一題中的(1)方案,你需要了解哪些資訊來預計它所能帶來的效能提升?

(1)方案掃描的是滿足C > :C的索引片。根據第5章QUBE方法的假設,順序掃描一行的時間為0.01ms,Fetch一行的時間是0.1ms。 那麼根據1秒的要求可以得出下面的關係:
滿足C > :C的最差輸入的FF * 10000000 * 0.01ms + x * 0.1ms <= 1s
其中FF是C > :C的過濾因子,x是結果集返回的行數,這兩個引數就是需要了解的資訊。當FF=1%時,需要掃描100000行,所需時間是1秒。