由於sql優化起來比較複雜,並且還會受環境限制,在開發過程中,寫sql必須必須要遵循以下幾點的原則:
1.oracle採用自下而上的順序解析where子句,根據這個原理,表之間的連線必須寫在其他where條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在where子句的末尾.
即:最大地減少資料範圍的條件寫在後面,oracle對sql的解析是從後向前的
例如:(低效)
select … from emp e where sal > 50000 and job = 『manager』 and 25 < (select count(*) from emp where mgr=e.empno);
(高效)
select … from emp e where 25 < (select count(*) from emp where mgr=e.empno) and sal > 50000 and job = 『manager』;
select * from gzl_action_define where id like '%12%' and name='合同簽訂' (快)
select * from gzl_action_define where name='合同簽訂' and id like '%12%' (慢)
2.select子句中避免使用』*』
當在select子句中列出所有的column時,使用動態sql列引用 『*』 是乙個方便的方法.可是,這是乙個非常低效的方法. 實際上,oracle在解析的過程中, 會將』*』 依次轉換成所有的列名, 這個工作是通過查詢資料字典完成的, 這意味著將耗費更多的時間.
3.使用表的別名(alias)
當在sql語句中連線多個表時, 請使用表的別名並把別名字首於每個column上.這樣一來,就可以減少解析的時間並減少那些由column歧義引起的語法錯誤.
注:column歧義指的是由於sql中不同的表具有相同的column名,當sql語句中出現這個column時,sql解析器無法判斷這個column的歸屬。
Oracle資料庫Where條件執行順序
1.oracle採用自下而上的順序解析where子句,根據這個原理,表之間的連線必須寫在其他where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在where子句的末尾.例如 低效 select from emp e where sal 50000 and job manager and 25 ...
資料庫left join中on和where條件區別
oracle的left join中on和where的區別 1,說明 oracle資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用leftjion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否...
oracle資料庫賦權 Oracle資料庫許可權
oracle資料庫許可權基本認識 一 oracle許可權 oracle系統提供三種許可權 object 物件級 system 系統級 role 角色級。許可權分類 1 系統許可權 系統規定使用者使用資料庫的許可權。系統許可權是對使用者而言 2 實體許可權 某種許可權使用者對其它使用者的表或檢視的訪問...