oracle select執(zhí)行順序的詳解
更新時間:2013年05月30日 11:11:03 作者:
本篇文章是對oracle select執(zhí)行順序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
SQL Select語句完整的執(zhí)行順序:
1、from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);
2、where子句基于指定的條件對記錄行進(jìn)行篩選;
3、group by子句將數(shù)據(jù)劃分為多個分組;
4、使用聚集函數(shù)進(jìn)行計算;
5、使用having子句篩選分組;
6、計算所有的表達(dá)式;
7、使用order by對結(jié)果集進(jìn)行排序。
oracle 語句提高查詢效率的方法
1:.. where column in(select * from ... where ...);
2:... where exists (select 'X' from ...where ...);
第二種格式要遠(yuǎn)比第一種格式的效率高。在Oracle中可以幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢
使用EXISTS,Oracle系統(tǒng)會首先檢查主查詢,然后運行子查詢直到它找到第一個匹配項,這就節(jié)省了時間
Oracle系統(tǒng)在執(zhí)行IN子查詢時,首先執(zhí)行子查詢,并將獲得的結(jié)果列表存放在在一個加了索引的臨時表中
選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效)
ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表(基礎(chǔ)表 driving table)將被最先處理。在FROM子句中包含多個表的情況下,你必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表。當(dāng)ORACLE處理多個表時,會運用排序及合并的方式連接它們。首先,掃描第一個表(FROM子句中最后的那個表)并對記錄進(jìn)行派序,然后掃描第二個表(FROM子句中最后第二個表),最后將所有從第二個表中檢索出的記錄與第一個表中合適記錄進(jìn)行合并。
如果有3個以上的表連接查詢,那就需要選擇交叉表(intersection table)作為基礎(chǔ)表,交叉表是指那個被其他表所引用的表。
WHERE子句中的連接順序
ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個原理,表之間的連接必須寫在其他WHERE條件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾。
1、from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);
2、where子句基于指定的條件對記錄行進(jìn)行篩選;
3、group by子句將數(shù)據(jù)劃分為多個分組;
4、使用聚集函數(shù)進(jìn)行計算;
5、使用having子句篩選分組;
6、計算所有的表達(dá)式;
7、使用order by對結(jié)果集進(jìn)行排序。
oracle 語句提高查詢效率的方法
1:.. where column in(select * from ... where ...);
2:... where exists (select 'X' from ...where ...);
第二種格式要遠(yuǎn)比第一種格式的效率高。在Oracle中可以幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢
使用EXISTS,Oracle系統(tǒng)會首先檢查主查詢,然后運行子查詢直到它找到第一個匹配項,這就節(jié)省了時間
Oracle系統(tǒng)在執(zhí)行IN子查詢時,首先執(zhí)行子查詢,并將獲得的結(jié)果列表存放在在一個加了索引的臨時表中
選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效)
ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表(基礎(chǔ)表 driving table)將被最先處理。在FROM子句中包含多個表的情況下,你必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表。當(dāng)ORACLE處理多個表時,會運用排序及合并的方式連接它們。首先,掃描第一個表(FROM子句中最后的那個表)并對記錄進(jìn)行派序,然后掃描第二個表(FROM子句中最后第二個表),最后將所有從第二個表中檢索出的記錄與第一個表中合適記錄進(jìn)行合并。
如果有3個以上的表連接查詢,那就需要選擇交叉表(intersection table)作為基礎(chǔ)表,交叉表是指那個被其他表所引用的表。
WHERE子句中的連接順序
ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個原理,表之間的連接必須寫在其他WHERE條件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾。
相關(guān)文章
Linux服務(wù)器下oracle實現(xiàn)rman自動備份的方式
為確保oracle數(shù)據(jù)庫數(shù)據(jù)的安全和一致性,一般我們都需要利用備份手段進(jìn)行數(shù)據(jù)庫的備份,在oracle數(shù)據(jù)庫中,rman因其強大的功能和完善的手段,成為數(shù)據(jù)庫備份的首選,故以下通過兩種方式配置腳本,實現(xiàn)rman自動備份,需要的朋友可以參考下2024-11-11
Linux下啟動Oracle服務(wù)和監(jiān)聽程序步驟
這篇文章給大家介紹了Linux下啟動Oracle服務(wù)和監(jiān)聽程序步驟,在文章末尾給大家介紹了Oracle數(shù)據(jù)庫的啟動和關(guān)閉方式小結(jié),感興趣的朋友一起看看吧2017-08-08
詳解Oracle在out參數(shù)中訪問光標(biāo)
這篇文章主要介紹了詳解Oracle在out參數(shù)中訪問光標(biāo)的相關(guān)資料,這里提供實例代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,希望能幫助到大家,需要的朋友可以參考下2017-08-08
查找oracle數(shù)據(jù)庫表中是否存在系統(tǒng)關(guān)鍵字的方法
遇到列說明無效的報錯情況,這是由于數(shù)據(jù)庫列名起的不好引起的,名字用到了數(shù)據(jù)庫的關(guān)鍵字2014-07-07
Oracle數(shù)據(jù)庫升級或數(shù)據(jù)遷移方法研究
本文詳細(xì)論述了oracle數(shù)據(jù)庫升級的升級前的準(zhǔn)備、升級過程和升級后的測試與調(diào)整工作,并對各種升級方法在多種操作系統(tǒng)平臺上作了測試。2016-07-07

