SQL(StructURED Query Language):結構化查詢語言
在進行Oracle優化之前,先讓我們花時間來聊聊SQL,並瞭解下SQL的前世今生。
在此先通過3W原則來講下SQL:
- what :
SQL is a domain-specific language used in programming and designed for managing data held in a relational database management system (RDBMS), or for stream processing in a relational data stream management system (RDSMS). It is particularly useful in handling structured data。
wiki裏的解釋翻譯過來就是:SQL是用來設計,編程和處理關係型數據庫的一門專用語言。 - why:
SQL有什麼優點,爲啥要使用它呢?事實上SQL最大的優點是基本符合英語句子結構,簡單易學(對於英語好的人來說),其次它在操縱關係型數據庫上很好用。但也僅限於關係型數據庫。 - how:
SQL語法衆多,而且很多方言(只使用本數據庫的語言),所以較雜,所以說一下子想學會是很難的,更何況還有調優的大山。
SQL的執行
sql的執行其實是很複雜的,不同的數據庫方案,不同的版本之間的差異都不小。但大抵是如下順序:
- 輸入:SQL語句通過I/O進入數據庫管理系統(DBMS)
- 檢查:DBMS檢查SQL語句,包括語法檢查,權限檢查,語義檢查等
- 解析:DBMS將合格的SQL語句拆分成關係代數語法樹
- 優化:優化器將語法樹進行分析,收集統計信息,分析執行計劃,選出最優的執行計劃(這過程可能會打亂語法樹的結構,而且只是在優化器不抽筋的情況下,換言之,優化器是有可能抽筋的,這時候的執行計劃就可能很爛,需要人工干預,也就是人工SQL優化),選擇出實際執行計劃。
- 執行計劃:按上面的執行計劃執行,並獲取組織結果
- 返回:將結果返回