今天一個學員在群裏問了我一道面試的題目:
TEST表有兩個列:a和b。如果a和b上已經有了復合索引,還能不能在a上建立索引?如果可以,那麽查詢的時候,是走復合索引還是單一索引?
這是愛奇藝的一道面試題。
下面是我的回復:
**************************************************************
你的兩個問題,1、可不可以建多個索引?2、查詢的時候,走哪個索引?
我以Oracle數據庫回答一下。
問題一:可以在一個列上建多個索引。但不建議這麽做,這會增加數據庫維護的成本,反而使得查詢性能下降。
問題二:答案是不一定。這取決於Oracle優化器如何生成SQL的執行計劃。關於優化器,我解釋一下。Oracle有兩種優化器:RBO和CBO。RBO是基於規則生成執行計劃,需要事先人為建立相應的規則;CBO是基於成本生成執行計劃,這種優化器會在多個執行計劃中選擇一個成本最低的執行計劃。Oracle現在的默認都是CBO的方式。至於如何查看成本信息,需要查詢Oracle的數據字典獲取相應的統計信息才可以。
這兩個問題涉及到了數據庫的優化,說起來就比較復雜了。51cto上有我的課程專門講數據庫的性能優化。如果你還不清楚,也可以加我好友,我再給你解釋。
**************************************************************
Tags: 索引 優化 執行 計劃 Oracle 問題
文章來源: