為了提高
sql的執行效率,在任何可能的時候使用等值連線
在索引列上使用表示式(包括函式),將會導致優化器忽略該列上的索引,除非該列上定義的為基於函式的索引,所以應該將函式寫在相對的位置上
e.empno
為數值索引列
select * from emp e where e.empno=1001;
使用索引
select * from emp e where e.empno=to_number('1001');
使用索引
select * from emp e where e.empno||''=1001;
不使用索引
select * from emp e where to_char(e.empno)='1001';
不使用索引
還需要注意,當右端函式中出現列名時(不管是否為索引列),索引同樣會失效:
e.ename
為字元索引列
select * from emp e where e.ename=nvl('test',e.ename);
不使用索引
select * from empwhere ename=nvl('test','111');
使用索引
要小心隱式的型別轉換:
select * from emp e where e.ename=123;
下面是執行計畫下的謂詞資訊:
1 - filter(to_number("e"."ename")=123)
可以看出
oralce
會隱式的將列轉換為數值型別,這時候索引失效,無論何時應該顯示的進行型別轉換來防止此種情況的發生
1.禁止對列的操作,如果對列進行操作,不僅不會使用索引,還會增加不必要的開銷,這個開銷在很多時候對效能影響很大
2.如何要建立索引,在資料選擇性高的列上建立索引是乙個指導。
3.優化思路:減少對遠端物件的訪問,將單條操作轉化為批量操作,儘量減少互動數等 (pl/sql)
Oracle SQL 優化(一點一點來)
為了提高sql 的執行效率,在任何可能的時候使用等值連線 在索引列上使用表示式 包括函式 將會導致優化器忽略該列上的索引,除非該列上定義的為基於函式的索引,所以應該將函式寫在相對的位置上 e.empno 為數值索引列 select from emp e where e.empno 1001 使用索引...
一點一點進步
requestparam,是獲取前端傳遞給後端的引數,可以使get方式,也可以是post方式。若前端傳遞的引數和後端接收的引數名稱不一致,則必須要標註。pathvariable,是獲取get方式,url後面引數,進行引數繫結。1.裝箱就是講基本資料型別轉換為包裝類,拆箱就是自動將包裝類轉換為基本資料...
這條路,走遠一點,再遠一點
最近,身心疲憊,一安靜下來想想現在的處境就想偷偷掉眼淚,我知道,最近很累,但是很想說一句 我樂意,我值得。做程式設計師半年多,應該8個月了吧。成績是有的,感覺自己確實成長了不少,公司願意在我什麼都不會的情況下收留我,我很感激,畢竟現在很難有公司願意去接受你的成長,所以,六月份 到過年那段時間的那段路...