sql執行過程

2021-07-10 17:26:53 字數 672 閱讀 2205

程式中寫的一條sql傳送到伺服器端

查詢此條sql是否存在執行計畫     如果存在則直接呼叫已經編譯好的執行計畫 否則進入下一步。

如果sql計畫快取中沒有對應的執行計畫,則進行語法校驗  檢視是否存在語法錯誤

如果語法沒有錯誤則進行語義校驗,例如,表名,列名,儲存過程等等資料庫物件是否真正存在

如果語義沒有錯誤  則獲取此物件的解析鎖,這是為了保證資料的統一性,防止髒讀發生。例如 如果不獲取此鎖  此時有一條記錄插入了  查詢也將此記錄讀入了   但插入動作回滾了   出現的髒讀

接下來就是對資料庫使用者許可權的驗證,sql語句語法,語義都正確,此時並不一定能夠得到查詢結果,如果資料庫使用者沒有相應的訪問許可權,伺服器會報出許可權不足的錯誤給應用程式,在稍大的專案中,往往乙個專案裡面會包含好幾個資料庫連線串,這些資料庫使用者具有不同的許可權,有的是唯讀許可權,有的是只寫許可權,有的是可讀可寫,根據不同的操作選取不同的使用者來執行,稍微不注意,無論你的sql語句寫的多麼完善,完美無缺都沒用。

解析的最後一步  對sql進行優化並放入sql執行計畫快取中

sql執行

如果查詢的資料已經存在於資料緩衝訪問區的話,伺服器會直接從資料緩衝儲存區中讀取資料返回給應用程式,避免了從物理檔案中讀取,提高查詢速度。否則資料行沒有在資料緩衝儲存區中,則會從物理檔案中讀取記錄返回給應用程式,同時把資料行寫入資料緩衝儲存區中,供下次使用 

SQL執行過程

mysql server pluggable storage engines 1 客戶端 服務端通訊協議 查詢快取,如果有資料返回,否則繼續 複製 2 解析器根據解析樹解析 預處理器檢測正常繼續,否則報錯 比如要查詢的字段不存在 複製 3 查詢優化器 explain查詢執行計畫 好比以前我們除錯介面...

sql執行過程分析

我們總是寫sql語句,資料庫把結果返回給我們,那中間過程又是什麼?如果了解oracle是怎麼執行sql語句的中間過程,對我們優化sql有很大的幫助 首先了解一下執行sql,需要消耗什麼資源,cpu,記憶體,io,我們要了解什麼情況下會消耗cpu,什麼情況下消耗記憶體,什麼情況下消耗io,只有了解了這...

mysql 過程 動態執行sql

begin declare v sql varchar 500 declare v table name varchar 20 declare v date time varchar 20 set v date time date format now y m d select v date tim...