日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

組合多個索引

只有查詢子句中在索引列上使用了索引操作符類中的操作符并且通過AND連接時才能使用單一索引。例如,給定一個(a, b) 上的索引,查詢條件WHERE a = 5 AND b = 6可以使用該索引,而查詢WHERE a = 5 OR b = 6不能直接使用該索引。

本數據庫具有組合多個索引(包括多次使用同一個索引)的能力來處理那些不能用單個索引掃描實現的情況。系統能在多個索引掃描之間安排ANDOR條件。例如, WHERE x = 42 OR x = 47 OR x = 53 OR x = 99這樣一個查詢可以被分解成為四個獨立的在x上索引掃描,每一個掃描使用其中一個條件。這些查詢的結果將被“或”起來形成最后的結果。另一個例子是如果我們在xy上都有獨立的索引,WHERE x = 5 AND y = 6這樣的查詢的一種可能的實現方式就是分別使用兩個索引配合相應的條件,然后將結果“與”起來得到最后的結果行。

為了組合多個索引,系統掃描每一個所需的索引并在內存中準備一個位圖用于指示表中符合索引條件的行的位置。然后這些位圖會被根據查詢的需要“與”和“或”起來。最后,實際的表行將被訪問并返回。表行將被以物理順序訪問,因為位圖就是以這種順序布局的。這意味著原始索引中的任何排序都會被丟失,并且如果存在一個ORDER BY子句就需要一個單獨的排序步驟。由于這個原因以及每一個附加的索引都需要額外的時間,即使有額外的索引可用,規劃器有時也會選擇使用單一索引掃描。

在所有的應用(除了最簡單的應用)中,可能會有多種有用的索引組合,數據庫開發人員必須做出權衡以決定提供哪些索引。有時候多列索引最好,但是有時更好的選擇是創建單獨的索引并依賴于索引組合特性。例如,如果我們的查詢中有時只涉及到列x,有時候只涉及到列y,還有時候會同時涉及到兩列,我們可以選擇在 x 和 y 上創建兩個獨立索引然后依賴索引組合來處理同時涉及到兩列的查詢。我們當然也可以創建一個(x, y)上的多列索引。當查詢同時涉及到兩列時,該索引會比組合索引效率更高,它在只涉及到 y 的查詢中幾乎完全無用,因此它不能是唯一的一個索引。一個多列索引和一個y上的獨立索引的組合將會工作得很好。多列索引可以用于那些只涉及到x的查詢,盡管它比x上的獨立索引更大且更慢。最后一種選擇是創建所有三個索引,但是這種選擇最適合表經常被執行所有三種查詢但是很少被更新的情況。如果其中一種查詢要明顯少于其他類型的查詢,我們可能需要只為常見類型的查詢創建兩個索引。