Index
複合索引和普通索引,冗餘/重複索引 - 導致性能損失
需要對以下指標提出建議,我們的綜合指標是否足夠,是否可以去除正常指標。
場景 - 我們有
ix4
和ix6
索引如下,請查看並告知是否ix4
需要(ix6
也包括),如果我們因列順序或任何其他因素而serialnumber
刪除,是否有任何預期的性能損失ix4
正如 ypercube 所指出的,Oracle(自 v9 起)支持在相關謂詞不包括索引中的第一列的某些情況下使用部分索引掃描。
我將留下其餘的答案,因為它與路過使用另一個數據庫的任何人有關。進一步說明:從閱讀中我得到的印像是,即使這是一個選項,查詢規劃器也會渴望在可能的情況下對另一個索引進行多次搜尋,因此如果您明確希望索引跳過掃描到,則可能需要使用索引提示發生。有傳言說在不久的將來會將這種運算符引入 postgres(請參閱https://commitfest.postgresql.org/19/1741/以及其他參考資料)。
查詢計劃者通常只能在需要引用索引中的第一列時使用複合索引,因此列上的索引
a, b, c
對於需要過濾/排序/兩者的查詢可能很有用 bya
,a
&b
或a
&b
&c
。當然,它也可以在引用其他列時使用,例如,如果按 and 進行過濾a
,d
但沒有復合索引可以更直接地幫助實現這一點。他們通常不能使用複合索引來過濾/分組/排序列表中後面的列,除非還需要更早的列。可以想像,他們可以稍後在索引中使用列,但維護所需的統計資訊以檢測何時這是一個有益的操作在一般情況下會很昂貴,使其成為不切實際的優化實現,所以我懷疑任何查詢引擎有這種事情。
**tl;dr:**如果您有過濾/排序/分組依據
serialnumber
但不是的查詢,儘管是複合索引的一部分,modelnumber
但可能需要較小的索引。serialnumber