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...