軟解析和硬解析 怎樣判斷一個(gè)SQL語(yǔ)句是硬解析還是軟解析?
怎樣判斷一個(gè)SQL語(yǔ)句是硬解析還是軟解析?只要執(zhí)行的SQL語(yǔ)句的文本是相同的,并且相應(yīng)的SQL執(zhí)行計(jì)劃已經(jīng)緩存在Oracle的內(nèi)存(庫(kù)緩存)中,不管您如何執(zhí)行SQL,都不是硬解析,而是軟解析。相反,如
怎樣判斷一個(gè)SQL語(yǔ)句是硬解析還是軟解析?
只要執(zhí)行的SQL語(yǔ)句的文本是相同的,并且相應(yīng)的SQL執(zhí)行計(jì)劃已經(jīng)緩存在Oracle的內(nèi)存(庫(kù)緩存)中,不管您如何執(zhí)行SQL,都不是硬解析,而是軟解析。相反,如果這個(gè)SQL是第一次執(zhí)行的,或者上一個(gè)SQL執(zhí)行的執(zhí)行計(jì)劃已經(jīng)從Oracle內(nèi)存中被替換,那么它肯定會(huì)被硬解析。建議我們看看Oracle內(nèi)存的數(shù)據(jù),會(huì)有相應(yīng)的解釋。
在Oracle中SQL語(yǔ)句的解析步驟是怎樣的呢?
請(qǐng)問(wèn)MySQL中的Oracle SGA中是否有共享池這樣的緩存機(jī)制?
Oracle使用共享池存儲(chǔ)解析的SQL、PL/SQL代碼、系統(tǒng)參數(shù)和數(shù)據(jù)字典信息。
由于MySQL的執(zhí)行計(jì)劃沒(méi)有Oracle復(fù)雜,解析器也是輕量級(jí)的,所以沒(méi)有Oracle緩存SQL執(zhí)行計(jì)劃的概念,每次解析都比較困難。
但是,您可以在會(huì)話期間手動(dòng)使用prepare語(yǔ)句進(jìn)行緩存,并且生命周期是整個(gè)會(huì)話。