需求是要比較最近兩個月的值,進行數據檢驗!因此我用自關聯,來將兩個月的數據放到一行上,而後進行比較!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 了。