Oracle硬解析與軟解析分別是什么?
Oracle中的每一條SQL語句在執行前都需要進行解析,分為軟解析和硬解析。Oracle中的SQL語句有兩種,一種是DDL語句(數據定義語言),從不共享,即每次執行都需要硬解析。還有一類是DML語句(數據操作語言),會根據情況選擇要么硬解析,要么軟解析。要么將SQL文本加載到庫緩存的堆中。
1.艱難的分析
硬解析通常包括以下過程:
1)檢查SQL語句的語法,看看是否有語法錯誤。比如有selectfromwhere之類的拼寫錯誤,如果有語法錯誤,則推導解析過程;
2)通過數據字典(行緩存)檢查SQL語句涉及的對象和列是否存在。如果不存在,則推導解析過程。
3)檢查SQL語句的用戶是否對涉及的對象有權限。如果否,則推斷解決方案;
4)通過優化器創建最佳執行計劃。這個過程會根據數據字典中對象的統計信息來計算多個執行計劃的代價,從而得到一個最優的執行計劃。這一步涉及大量的數據操作,會消耗大量的CPU資源;(庫緩存的主要目的是通過軟解析減少這一步);
5)將游標生成的執行計劃和SQL文本加載到庫緩存中的堆中。
2.軟解析
所謂軟解析是因為在庫緩存中存在文本相同的SQL語句,所以對這條SQL語句的解析可以省去硬解析中的一步多步。從而節省了大量的資源消耗。
3.軟分析
所謂軟解析,就是不解析。設置session_cached_cursors參數時,當一個會話第三次執行同一個SQL語句時,該SQL語句的游標信息將被傳輸到該會話的PGA中。這樣,s
Oracle分析函數RANK()?
Rank是oracle分析函數之一,主要用法是Rank()over(partitionbyXXorderbyZZdesc),一般用于分組排序。與groupbyXXorderbyZZ不同,它不影響現有數據。
例如:xxzz1213142226然后選擇xx,zz,ra。表中的NK()over(partitionbyxxorderbyZZ)aa的結果是xxzzaa12132143221262partitionby,所以你不不用寫了,和orderby的排序結果一樣,只是會有序號等用途,還有很多分析功能。這個你可以在網上找,里面有很多例子。希望對你有幫助。