select 語句的解析過程

苦笑人發表於2016-06-17
select c2 from t1 where c1='A';

1、做一個語法解析,判斷有沒有錯誤。
2、把該sql轉換為ASCII字元,就是一串數字。針對這串數字運用hash函式,得到了hash value,假設是3.
3、到3號bucket上遍歷,查詢該sql是否存在。
4、假設不存在,到shared pool裡找一塊連續的可用空間(叫做一個chunk),把sql文字放入該chunk。
5、把該chunk放到3號bucket上。
6、開始進行硬解析:
        a、命名轉換。
        b、文法分析,判斷t1表是否存在、c1列和c2列是否存在、使用者是否有許可權看t1表。該過程中,需要訪問資料字典,為了加快速度,把資料欄位資訊從資料塊裡抽取出來,
            組成行列形式快取在shared pool裡。這塊空間就叫做dict cache。
        c、生成執行計劃
        d、快取執行計劃。    
假設上面第三步中,到3號bucket上找到該sql,則進行軟解析。
還有一宗解析,叫做不解析。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29952014/viewspace-2120321/,如需轉載,請註明出處,否則將追究法律責任。

相關文章