sql語句的優化
1.在where子句中使用 is null 或 is not null 時,oracle優化器就不能使用索引了.
2.對於有連線的列,即使最有乙個是靜態的值,優化器也不會使用索引
比如: select * from employss where first_name||''||last_name='beill cliton'
要寫成 :select * from employss where first_name='beill' and last_name='beill cliton'
這時oracle 就會採用 基於 last_name 的索引
3.帶萬用字元 (%) 的 like 語句
比如: select * from employee where last_name like '%cliton%';
%在詞首出現oracle系統就不能使用 last_name 的索引;
select * from employee where last_name like 'cliton%'
4:order by
任何在order by語句的非索引項或者表示式都會降低查詢效率;
5:not
<>是就相當於not
① select * from salary<>3000;
② select * from salary >3000 or salary <3000
①和②的查詢結果是一樣的,但②允許oracle對salary列使用索引,效率高
not會產生在和在索引列上使用函式相同的影響. 當oracle」遇到」not,他就會停止使用索引轉而執行全表掃瞄.
6: exist 代替 in
not exist 代替 not in
select * from a where id in(select id from b)
以上查詢使用了in語句,in()只執行一次,它查出b表中的所有id欄位並快取起來.之後,檢查a表的id是否與b表中的 id相等,如果相等則將 a表的記錄加入結果集中,直到遍歷完a表的所有記錄.
exist 比 in 的執行效率更高
7:[img]
8.where條件的順序
[img]
9:union all 和 union
[img]
oracle的SQL語句效能優化
使用oracle資料庫的應用系統,有時出現sql效能突然變差,特別是對於oltp型別系統執行頻繁的核心sql,如果出現效能問題,通常會影響整個資料庫的效能,進而影響整個系統的正常執行。這是常常遇到的問題,也是一些dba的挑戰。sql效能變差原因分析 sql的效能變差,通常是在sql語句重新進行了解析...
SQL 語句優化 OR 語句優化案例
從上海來到溫州,看了前幾天監控的sql語句和資料變化,發現有一條語句的io次數很大,達到了150萬次io,而兩個表的資料也就不到20萬,為何有如此多的io次數,下面是執行語句 select ws.nodeid,wi.laststepid,wi.curstepid from workflowinfo ...
SQL語句優化之經典總結
不可不優化的where子句 1.例 下列sql條件語句中的列都建有恰當的索引,但執行速度卻非常慢 select from record where substring card no,1,4 5378 13秒 select from record where amount 30 1000 11秒 s...