1.from子句
oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表(基礎表 driving table)將被最先處理。 在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。
例如:t1 400w資料,t2 40資料
from t1,t2 優於 fromt2,t1
如果有第三張連線表,則將連線表放在最後作為基礎表:
from t1,t2,t3 where t1.no=t3.no and t2.id=t3.id
2.where子句
oracle採用自下而上的順序解析where子句,根據這個原理,表之間的連線必須寫在其他where條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在where子句的末尾。
例如: select * from table1 where a='a' and b1='b' and c1='c'
table1有a,b,c三個屬性,上面的sql會報錯:c1識別符號無效,改了之後執行,報b1識別符號無效
重右往左解析sql,從下往上執行,建議把過濾量大的語句寫在後面。盡量把精確條件往後寫,表之間的連線必須寫在其他where條件之前
。精確條件 t1.a='a' 表連線條件t1.a=t2.a
3.避免使用 *
oracle在解析的過程中,會將』*』 依次轉換成所有的列名, 這個工作是通過查詢資料字典完成的,這將耗費更多的時間。
4.用exists替代in,用於連線另乙個表
5.使用大寫
6.用》=替代》 :
高效:select * from emp where deptno >=4 低效: select * from emp where deptno >3
兩者的區別在於,前者dbms將直接跳到第乙個dept等於4的記錄而後者將首先定位到deptno=3的記錄並且向前掃瞄到第乙個dept大於3的記錄。
7.使用表的別名
8.避免在索引列上使用is null和is not null
對於單列索引,如果列包含空值,索引中將不存在此記錄。對於復合索引,如果每個列都為空,索引中同樣不存在此記錄。如果至少有乙個列不為空,則記錄存在於索引中。
9.使用索引
(1)『!=' 將不使用索引。記住, 索引只能告訴你什麼存在於表中, 而不能告訴你什麼不存在於表中。
(2)『||'是字元連線函式。就象其他函式那樣, 停用了索引。
(3)『+'是數學函式。就象其他數學函式那樣, 停用了索引。
(4)相同的索引列不能互相比較,這將會啟用全表掃瞄。
如何提高資料庫查詢效率
2017 02 15 目錄 1 硬體調整效能 2 資料庫設計方面 2.1 建立索引 2.2 字段型別 2.3 表變數和臨時表 3 sql語句方面 3.1 避免全表掃瞄 3.2 只取需要的字段和行 3.3 盡量避免使用游標 3.4 盡量避免大事務操作,提高系統併發能力 3.5 使用儲存過程 在乙個千萬...
如何從資料庫設計方面提高資料庫查詢效率
可以從以下多個方面優化資料庫設計提高資料庫查詢效率 a.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。b.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from...
提高資料庫查詢效率的簡單常用方法
1 where子句中條件的順序對效能沒有影響,注意,額外說一下,這裡只是說條件的順序,不包含表的順序。在rbo優化器模式下,表應按結果記錄數從大到小的順序從左到右來排列,因為表間連線時,最右邊的表會被放到巢狀迴圈的最外層。最外層的迴圈次數越少,效率越高。2 盡量避免大事務操作,提高系統併發能力。3 ...