新聞中心
學(xué)習(xí)Oracle時(shí),你可能會(huì)遇到驗(yàn)證Oracle SQL語(yǔ)句問(wèn)題,這里將介紹驗(yàn)證Oracle SQL語(yǔ)句問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。檢查共享池中是否有相同的語(yǔ)句存在。假如執(zhí)行的SQL語(yǔ)句已經(jīng)在共享池中存在同樣的副本,那么該SQL語(yǔ)句將會(huì)被軟解析,也就是可以重用已解析過(guò)的語(yǔ)句的執(zhí)行計(jì)劃和優(yōu)化方案,可以忽略語(yǔ)句解析過(guò)程中最耗費(fèi)資源的步驟,這也是我們?yōu)槭裁匆恢睆?qiáng)調(diào)避免硬解析的原因。這個(gè)步驟又可以分為兩個(gè)步驟:

10年積累的做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有平魯免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
(1)驗(yàn)證Oracle SQL語(yǔ)句是否完全一致。在這個(gè)步驟中,Oracle將會(huì)對(duì)傳遞進(jìn)來(lái)的SQL語(yǔ)句使用HASH函數(shù)運(yùn)算得出HASH值,再與共享池中現(xiàn)有語(yǔ)句的 HASH值進(jìn)行比較看是否一一對(duì)應(yīng)?,F(xiàn)有數(shù)據(jù)庫(kù)中SQL語(yǔ)句的HASH值我們可以通過(guò)訪(fǎng)問(wèn)v$sql、v$sqlarea、v$sqltext等數(shù)據(jù)字典中的HASH_VALUE列查詢(xún)得出。如果SQL語(yǔ)句的HASH值一致,那么ORACLE事實(shí)上還需要對(duì)SQL語(yǔ)句的語(yǔ)義進(jìn)行再次檢測(cè),以決定是否一致。那么為什么Oracle需要再次對(duì)語(yǔ)句文本進(jìn)行檢測(cè)呢?不是SQL語(yǔ)句的HASH值已經(jīng)對(duì)應(yīng)上了?事實(shí)上就算是SQL語(yǔ)句的HASH值已經(jīng)對(duì)應(yīng)上了,并不能說(shuō)明這兩條SQL語(yǔ)句就已經(jīng)可以共享了。我們首先參考如下一個(gè)例子:假如用戶(hù)A有自己的一張表EMP,他要執(zhí)行查詢(xún)語(yǔ)句:select * from emp;用戶(hù)B也有一張EMP表,同樣要查詢(xún)select * from emp;這樣他們兩條語(yǔ)句在文本上是一模一樣的,他們的HASH值也會(huì)一樣,但是由于涉及到查詢(xún)的相關(guān)表不一樣,他們事實(shí)上是無(wú)法共享的。假如這時(shí)候用戶(hù) C又要查詢(xún)同樣一條語(yǔ)句,他查詢(xún)的表為scott下的公有同義詞,還有就是SCOTT也查詢(xún)同樣一張自己的表emp,情況會(huì)是如何呢?
我們可以看到這四個(gè)查詢(xún)的語(yǔ)句文本和HASH值都是一樣的,但是由于查詢(xún)的對(duì)象不同,只有后面兩個(gè)語(yǔ)句是可以共享的,不同情況的語(yǔ)句還是需要硬解析的。因此在檢查共享池共同SQL語(yǔ)句的時(shí)候,是需要根據(jù)具體情況而定的。
(2)驗(yàn)證Oracle SQL語(yǔ)句執(zhí)行環(huán)境是否相同。比如同樣一條SQL語(yǔ)句,一個(gè)查詢(xún)會(huì)話(huà)加了/*+ first_rows */的HINT,另外一個(gè)用戶(hù)加/*+ all_rows */的HINT,他們就會(huì)產(chǎn)生不同的執(zhí)行計(jì)劃,盡管他們是查詢(xún)同樣的數(shù)據(jù)。我們下面就一個(gè)實(shí)例來(lái)說(shuō)明SQL執(zhí)行環(huán)境對(duì)解析的影響,我們通過(guò)將會(huì)話(huà)的 workarea_size_policy變更來(lái)查看對(duì)同樣一條SQL語(yǔ)句執(zhí)行的影響。
Oracle根據(jù)提交的SQL語(yǔ)句再查詢(xún)相應(yīng)的數(shù)據(jù)對(duì)象是否有統(tǒng)計(jì)信息。如果有統(tǒng)計(jì)信息的話(huà),那么CBO將會(huì)使用這些統(tǒng)計(jì)信息產(chǎn)生所有可能的執(zhí)行計(jì)劃(可能多達(dá)成千上萬(wàn)個(gè))和相應(yīng)的Cost,最終選擇Cost最低的那個(gè)執(zhí)行計(jì)劃。如果查詢(xún)的數(shù)據(jù)對(duì)象無(wú)統(tǒng)計(jì)信息,則按RBO的默認(rèn)規(guī)則選擇相應(yīng)的執(zhí)行計(jì)劃。這個(gè)步驟也是解析中最耗費(fèi)資源的,因此我們應(yīng)該極力避免硬解析的產(chǎn)生。至此,解析的步驟已經(jīng)全部完成,Oracle將會(huì)根據(jù)解析產(chǎn)生的執(zhí)行計(jì)劃執(zhí)行SQL語(yǔ)句和提取相應(yīng)的數(shù)據(jù)。
當(dāng)前文章:詳聊驗(yàn)證OracleSQL語(yǔ)句
網(wǎng)站網(wǎng)址:http://m.fisionsoft.com.cn/article/cdohiih.html


咨詢(xún)
建站咨詢(xún)
