分割槽表分割槽索引查詢效率探究

dawn009發表於2014-07-25
                                 

                            oracle資料庫分割槽表按主鍵查詢快還是按主鍵+分割槽條件查詢快?

我有一張表,TEST,資料量很大, 主鍵是ID(number),這張表按SQBM(varchar2)欄位分割槽,以下三個SQL,哪個最快?還是都一樣?
1、select * from TEST where ID=?
2、select * from TEST where ID=? and SQBM=?
3、select * from TEST where SQBM=? and ID=?
我用PL/SQL查詢分析器看到效率一樣,因為都是走主鍵的UNIQUEINDEX,但是公司的人說加上SQBM是有作用的,我迷糊了,請大蝦指點,謝謝!
-----------------------------------------&gt>
網友採納
1.首先我想知道SQBM欄位上是否存在INDEX,INDEX型別是global還是local partition。
SQBM上沒有INDEX的話,則3個SQL的執行效能是一樣的。都只會使用PK的index
2.如果表上存在(ID,SQBM)的組合INDEX,那麼你新增SQBM條件是有作用的。
3.對於SQL2,SQL3 條件順序顛倒是不會影響效能的。
追問
謝謝你,
1、SQBM欄位上不存在INDEX,但是這張表按SQBM分割槽。
2、表上不存在(ID,SQBM)的組合INDEX。
3、這是oracle資料庫,查詢條件從右到左解析,也就是說,能夠過濾大量資料的放最後比放前面效率高(但這裡面有主鍵,我用PL\SQL查詢分析器效率是一樣的,但是公司的人說加上SQBM是有作用的,我想知道是我弄錯了還是他弄錯了)。
回答
如果表上沒有任何INDEX,那麼你加SQBM這個條件是有用的,可以由遍歷所有分割槽,變為只遍歷SQBM指定值的一個分割槽。
如果你SQBM上沒有任何INDEX,而ID上存在主鍵,則3個SQL都會走主鍵,那麼加上SQBM條件不會有任何效能提升。因為SQL根本就不會遍歷表結構,而是去遍歷索引結構。查到相關ID值的INDEX葉節點就會直接指向資料了。也就跟分割槽沒什麼關係了。

我不知道你資料庫什麼版本,使用CBO方式的話,where條件順序是不會影響效能的。只和你的執行計劃有關。
-----&gt>轉載於:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1227267/,如需轉載,請註明出處,否則將追究法律責任。

相關文章