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