oracle 兩表關聯時,年月條件的寫法引發的巨大性能的差別

需求是要比較最近兩個月的值,進行數據檢驗!因此我用自關聯,來將兩個月的數據放到一行上,而後進行比較!sql

sql語句相似於:oracle

select b.ny,b.dwdm,。。。。,
     a.js  as sy_js , b.js,    --取出上下兩個月的同一列的指標。
     。。。。。。。
 from tjxx_10 a,tjxx_10 b where    a.dwdm=b.dwdm and a.shbz=b.shbz and a.csxm=b.csxm
  and b.ny='201508' and a.ny=b.ny-1

這個語句就是把tjxx_10自關聯一下,而後讓a行指標201507,b行指標201508.函數


因爲該表已經比較大了有幾十萬行吧!結果上面執行查詢,就要4秒左右。性能

第一次修改:code

 and b.ny='201508' and a.ny=201507

這麼關聯,仍是4秒。索引

第二次修改字符串

and b.ny='201508' and a.ny='201507'

結果居然是 0.02秒。class


結論:一直以來,我認爲在sql中,ny列是varchar2(6)select

a.ny=b.ny-1 或者a.ny=201507這種寫法都是對的。由於都能正確執行。我認爲oracle會自動把數字轉爲字符串!sql語句

但今天遇到這個超大表時,展現出的性能差別說明oracle對上面兩種狀況都不能利用索引,

由於右側至關於一個函數,可能要遍歷每一行記錄,

切記:ny='201507'  不要再寫作  ny=201507    了。

相關文章
相關標籤/搜索