Oracle SQL 優化(一點一點來)

2021-05-24 12:17:55 字數 998 閱讀 2836

為了提高

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個月了吧。成績是有的,感覺自己確實成長了不少,公司願意在我什麼都不會的情況下收留我,我很感激,畢竟現在很難有公司願意去接受你的成長,所以,六月份 到過年那段時間的那段路...