1. 程式人生 > >oracle查詢SQL優化

oracle查詢SQL優化

如果表中的時間欄位是索引,那麼時間欄位不要使用函式,函式會使索引失效。

例如:

select * from mytable where trunc(createtime)=trunc(sysdate);
--不走索引,慢吞吞。createtime欄位有時分秒,使用trunc()函式去除時分秒,只保留年月日

改進方案:

select * from mytable where createtime between to_date(to_char(trunc(SYSDATE), 'yyyy/mm/dd hh24:mi:ss'),
'yyyy/mm/dd hh24:mi:ss') and
to_date(to_char(trunc(SYSDATE), 'yyyy/mm/dd hh24:mi:ss'), 'yyyy/mm/dd hh24:mi:ss');
--走索引,效率飛昇

 

ORACLE在解析sql語句的時候對FROM子句後面的表名是從右往左解析的,是先掃描最右邊的表,然後在掃描左邊的表,然後用左邊的表匹配資料,匹配成功後就合併。

所以,在對多表查詢中,一定要把小表寫在最右邊,如果有中間表,中間表寫在最右邊,然後是最小表。

ORACLE採用自下而上、從右向左的順序解析WHERE子句,影響查詢速度的條件就放在離where條件最近的地方。像索引查詢速度快的就放在where條件的最後。

以上僅供參考,最終的效果如何,自己在PL/SQL編輯器上面實際執行檢視。

參考:https://www.cnblogs.com/linjiqin/archive/2011/04/13/2014818.html