Oracle數(shù)據(jù)庫復(fù)合索引的性能問題
在實(shí)踐中ORACLE數(shù)據(jù)庫復(fù)合索引設(shè)計(jì)不合理可能會(huì)引發(fā)性能問題。
通常對(duì)于復(fù)合索引,優(yōu)先將選擇性最高的字段放在第一位。
建立復(fù)合索引時(shí),要充分考慮各字段的篩選度,將篩選性更好的字段排在前面。
篩選度可參考"count(distinct A)/count(*)"或在dba_tab_col_statistics視圖查看num_distinct,唯一值越多,則篩選度就越高,也稱為可選擇性越高,反之亦然。
整改方式,請(qǐng)確認(rèn)是否測(cè)試環(huán)境的表數(shù)據(jù)分布情況與生產(chǎn)相同或相似,如非數(shù)據(jù)原因造成的問題,建議調(diào)整索引字段1和字段2的順序,將說明字段4放到說明字段3前。
在準(zhǔn)備調(diào)整復(fù)合索引字段順序前,有必要了解復(fù)合索引使用的一個(gè)重要原則:復(fù)合索引最左原則。
復(fù)合索引最左原則:即where條件只有使用到最左邊索引列的時(shí)候,復(fù)合索引才可能被使用到。通常,設(shè)計(jì)復(fù)合索引時(shí),我們需要綜合表上數(shù)據(jù)訪問特點(diǎn)、訪問頻率來設(shè)計(jì)復(fù)合索引中的字段順序,以使一個(gè)索引盡量服務(wù)于更多的SQL訪問請(qǐng)求。
所以,僅根據(jù)字段可選性的高低來調(diào)整字段順序是不嚴(yán)謹(jǐn)?shù)?,還需要確認(rèn)原有索引的使用情況,需確保調(diào)整后,不會(huì)有SQL無索引可用,或性能下降是可接受的。如不能確認(rèn),建議不做改動(dòng)。如確有需要,就新建一個(gè)索引吧。