oracle 处理过程,Oracle SQL语句处理过程(转载)
一般來說,數(shù)據(jù)庫處理SQL都會經(jīng)過三個過程:分析、執(zhí)行、返回結(jié)果,比如COGNOS ReportNet通過拖放式完成表現(xiàn)層后,還是會自動生成SQL,然后將SQL傳遞到ORACLE進行處理。
1。分析
分析是處理SQL語句的第一步,它是SQL語句處理過程較為重要的一步,它又包含幾個方面:
(1)語法分析,oracel是采用數(shù)據(jù)庫常用的自底向上的分析方法,包含檢查語法規(guī)范,命名規(guī)范,它是處理SQL語句中最消耗時間且代價最高的步驟,主要表現(xiàn)在綁定變量和存儲過程等方面:
A.綁定變量:這也是為什么使用在某種情況下綁定變量方式會比非綁定方式效率和性能高出幾倍,主要是綁定變量只會編譯一次,隨后就會把查詢計劃存儲在一個共享池里,以便以后獲取和重用這個查詢計劃。
B.存儲過程:存儲過程比一般的SQL語句要快,就是它不用再次編譯,而且還可以利用數(shù)據(jù)庫里許多特性,使得它的速度會比一般SQL語句快很多
(2)語義分析,學(xué)過編譯原理的都知道,這一步是非常重要的,ORACLE主要是分析SQL語句格式是否正確,各個對象是否存在,以及它是否有足夠的權(quán)限執(zhí)行
(3)視圖轉(zhuǎn)換,它會將涉及的視圖的查詢語句轉(zhuǎn)換為較為簡單的等效連接表達式,有些人認為視圖一定執(zhí)行速度會比使用表要快,其實不一定的,主要具體情況具體分析,只要把這篇文章真正理解,自己分析是不困難的;
(4)表達式轉(zhuǎn)換。將復(fù)雜的SQL表達式轉(zhuǎn)換為相應(yīng)的對基表的查詢語句。寫SQL的標準
A.不要再WHERE字句中進行計算,如SELECT AT_ID FROM ARTICLE WHERE AT_ID >10*10000 AND AT_ID
B.注意數(shù)據(jù)類型的匹配
SELECT BK_ID FROM BOOK WHERE BK_PRICE>30 就比不上SELECT BK_ID FROM BOOK WHERE BK_PRICE>30.00好啦
(5)選擇優(yōu)化器,學(xué)過編譯原理時候就知道,使用不用的優(yōu)化器是會有不同的執(zhí)行效率,當(dāng)然,最好是能根據(jù)批量的SQL自己編一個特定的優(yōu)化器
(6)選擇連接方式。INFORMIX就有簡單的歸并連接 和排序-歸并連接技術(shù)之分,主要看是否使用索引的問題。
(7)選擇連接順序。多表連接,oracle選擇那一個對表先連接,并選擇源數(shù)據(jù)表
(8)選擇數(shù)據(jù)搜索路徑,根據(jù)以上條件選擇合適的數(shù)據(jù)搜蘇路徑,如選用全表搜索還是利用索引或是其他方式搜索
(9)到SQL中為該SQL語句找到一個共享SQL區(qū),如已經(jīng)有共享SQL區(qū),則直接執(zhí)行共享區(qū)內(nèi)容。
2。執(zhí)行
主要在于使用UPDATE和DELETE語句時,必須將行鎖定,以免其他用戶修改。ORACLE先從數(shù)據(jù)庫緩沖區(qū)中尋找是否存在所要的數(shù)據(jù)塊,如果存在,就直接讀或修改,否則從物理文件中讀到數(shù)據(jù)庫緩沖區(qū)中。
3。返回結(jié)果
對SELECT 語句需要返回結(jié)果的語句,首先看是否需要排序,需要,則排序后返回給用戶,然后根據(jù)內(nèi)存的大小不同,可以一次取出一行數(shù)據(jù),一可以一次取一組數(shù)據(jù)。這時,可能要用到數(shù)據(jù)結(jié)構(gòu)中的外部排序,并歸排序等算法,所以如內(nèi)存允許的話,盡量大會提高性能的;
最后總結(jié)一下經(jīng)用使用的SELECT的處理步驟:
打開游標
|
---------查看共享SQL區(qū),是否有相同的SQL語句
|?????????????????????????????????????? |
|?????????????????????????????????? 分析
|?????????????????????????????????????? |
|??????????????????????????????????? 定義
------------------------???????? |
|
------------------------- 綁定變量
|????????????????????????????????????? |
|?????????????????????????????????? 捆綁
--------------- -----------?? |
|
并行處理
|
執(zhí)行查詢
|
返回結(jié)果
|
關(guān)閉游標
轉(zhuǎn)載:http://blog.csdn.net/wonth/archive/2007/05/06/1598446.aspx
總結(jié)
以上是生活随笔為你收集整理的oracle 处理过程,Oracle SQL语句处理过程(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球独家首发!一加Ace 2V支持“主动
- 下一篇: pip install安装php,详述P