oracle語句優化

2021-09-22 04:58:37 字數 1981 閱讀 7690

1.多表查詢

選擇合適的基礎表

select * from  table1,table2,basetable
選擇最有效率的表名順序

2. where子句中的連線順序

oracle採用自下而上的順序解析where子句。

先寫表關聯後寫條件:過濾掉最大數量記錄的條件必須寫在where子句的末尾

3.計算記錄條數

select count(index_column) from table;
或者

select count(1) from tablename;
4.使用exsits替代in

select * from trans a where exists 

(select b.account from cust b where b.account = a.account )

5.使用表連線替代exsits

6.索引的注意點

(1) 範圍與等式的優先順序

select ename from emp

where deptno > 20 //不管有沒有索引

and emp_cat = 『a』; //優先

(2) 運算

select ename

from emp

where empno = 7935

and deptno + 0 = 10 /*deptno上的索引將失效*/

and emp_type || 『』 = 『a』 /*emp_type上的索引將失效*/

(3)優先使用唯一性索引

(4)避免在索引列上使用not

(5)用 >= 替代 >

(6)避免在索引列上使用is null和is not null

select …

from department

where dept_code >=0;//推薦

(7)總是使用索引的第乙個列

(8)使用union all替代union

(9)避免隱式改變索引列的型別

/*假設emp_type是乙個字元型別的索引列.*/

select …

from emp

where emp_type = 123

(10)小符號

不使用索引:

使用索引:

!=0;

> 0;

與and

+>

account_name = nvl(:acc_name, account_name)

account_name like nvl(:acc_name, 』%』)

(11) 避免使用耗費資源的操作

帶有distinct,union,minus,intersect,order by的sql語句會啟動sql引擎 distinct需要一次排序操作,而其他的至少需要執行兩次排序。

(12)group by寫法

先寫條件後分組

(13)使用日期

當使用日期時,需要注意如果有超過5位小數加到日期上,這個日期會進到下一天!

select to_date(『01-jan-93』+.99999)

from dual

returns:

』01-jan-93 23:59:59』

select to_date(『01-jan-93』+.999999)

from dual

returns:

』02-jan-93 00:00:00』

Oracle優化語句

下面的例項中使用3個表 table a r1,r2,r3,r4,r5,c1,c2,b2 b r1,b1,b2 c r1,c1,c2,b2 括號中即為表中的字段。一 使用特定表中的索引。有時候乙個表中的資料量很大時候,索引是非常非常的重要,何為索引?我來舉個例子,你一聽就能明白,比如 你想搜尋我的電腦...

Oracle 語句優化

1 盡量少用in,基本上所有的in操作都可以用exists代替 2 用not exists或者外連線替代 not in,not in 不能應用索引 3 盡量不是用 amp 不等於操作符不會用到索引 2 用 2 or 2代替 4 設計表的時候把索引列設定為not null 5 盡量不把萬用字元 和 作...

Oracle 優化 Like語句優化

1.盡量不要使用 like 2.對於like 可以用列的索引 3.對於like 以 開頭,不以 結尾 可以利用 反序列和函式索引 變成 like 4.查詢 like xx 應該使用函式instr string source,string xx 例如 select count from tb name...