新聞中心
Oracle還是比較常用的,于是我研究了一下Oracle SQL語句,在這里拿出來和大家分享一下,希望對大家有用。我們都知道在Oracle SQL語句在執(zhí)行之前都需要經(jīng)過解析,這里面又分為軟解析和硬解析。那么這兩種解析有何不同之處呢?它們又分別是如何進(jìn)行解析呢?Oracle內(nèi)部解析的步驟又是如何進(jìn)行的呢?下面我們就這些話題進(jìn)行共同探討。

創(chuàng)新互聯(lián)公司主營潞州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),潞州h5微信小程序定制開發(fā)搭建,潞州網(wǎng)站營銷推廣歡迎潞州等地區(qū)企業(yè)咨詢
在Oracle中存在兩種類型的SQL語句,一類為DDL語句,他們是從來不會共享使用的,也就是每次執(zhí)行都需要進(jìn)行硬解析。還有一類就是DML語句,他們會根據(jù)情況選擇要么進(jìn)行硬解析,要么進(jìn)行軟解析。在Oracle 8i OCP教材的023中1-12有說明SQL語句的解析步驟,當(dāng)一條SQL語句從客戶端進(jìn)程傳遞到服務(wù)器端進(jìn)程后,需要執(zhí)行如下步驟:
◆在共享池中搜索 SQL語句的現(xiàn)有副本
◆驗(yàn)證 SQL 語句的語法是否準(zhǔn)確
◆執(zhí)行數(shù)據(jù)字典查找來驗(yàn)證表和列的定義
◆獲取對象的分析鎖以便在語句的分析過程中對象的定義不會改變
◆檢查用戶訪問引用方案對象的權(quán)限
◆確定語句的最佳執(zhí)行計劃
◆將語句和執(zhí)行計劃載入共享的 SQL 區(qū)
這個先入為主的概念一直占據(jù)著我的腦海,我認(rèn)為硬解析就是上面幾個步驟。相對于硬解析,軟解析的步驟就是上面第一步找到現(xiàn)有SQL語句的副本后,只需要驗(yàn)證用戶是否有權(quán)限執(zhí)行就是了,這樣省略上面好幾個步驟,相對硬解析來說性能開銷就非常小了。即使是在論壇上和大家討論時,我也一直堅持這個看法。直到前一天看了Tom的《Effective Oracle By Design》中關(guān)于語句處理的章節(jié)后,我才知道這個自己一直堅持的觀點(diǎn)事實(shí)上是錯誤的。
事實(shí)上,在Oracle SQL語句的解析步驟如下:
1、 語法檢測。判斷一條Oracle SQL語句的語法是否符合SQL的規(guī)范,比如執(zhí)行:SQL> selet * from emp;我們就可以看出由于Select關(guān)鍵字少了一個“c”,這條語句就無法通過語法檢驗(yàn)的步驟了。
2、 語義檢查。語法正確的SQL語句在解析的第二個步驟就是判斷該SQL語句所訪問的表及列是否準(zhǔn)確?用戶是否有權(quán)限訪問或更改相應(yīng)的表或列?比如如下語句:
- SQL> select * from emp;
- select * from emp
- *
- ERROR at line 1:
- ORA-00942: table or view does not exist
由于查詢用戶沒有可供訪問的emp對象,因此該Oracle SQL語句無法通過語義檢查。
【編輯推薦】
- Oracle SQL語句優(yōu)化的相關(guān)技術(shù)分析
- Oracle SQL 內(nèi)置函數(shù)大全
- ORACLE SQL性能優(yōu)化 (上)
- ORACLE SQL性能優(yōu)化 (下)
- Oracle SQL到DB2 SQL移植解決方案
網(wǎng)站欄目:閑扯OracleSQL語句解析步驟
網(wǎng)頁鏈接:http://www.5511xx.com/article/ccoeoej.html


咨詢
建站咨詢
