SQL是如何執行的
Oracle 中的 SQL 是如何執行的
-
語法檢查:檢查 SQL 拼寫是否正確,如果不正確,Oracle 會報語法錯誤。
-
語義檢查:檢查 SQL 中的訪問物件是否存在。比如我們在寫 SELECT 語句的時候,列名寫錯了,系統就會提示錯誤。語法檢查和語義檢查的作用是保證 SQL 語句沒有錯誤。
-
許可權檢查:看使用者是否具備訪問該資料的許可權。
-
共享池檢查:共享池(Shared Pool)是一塊記憶體池,最主要的作用是快取 SQL 語句和該語句的執行計劃。Oracle 通過檢查共享池是否存在 SQL 語句的執行計劃,來判斷進行軟解析,還是硬解析。那軟解析和硬解析又該怎麼理解呢?
在共享池中,Oracle 首先對 SQL 語句進行 Hash 運算,然後根據 Hash 值在庫快取(Library Cache)中查詢,如果存在 SQL 語句的執行計劃,就直接拿來執行,直接進入“執行器”的環節,這就是軟解析。
如果沒有找到 SQL 語句和執行計劃,Oracle 就需要建立解析樹進行解析,生成執行計劃,進入“優化器”這個步驟,這就是硬解析。
-
優化器:優化器中就是要進行硬解析,也就是決定怎麼做,比如建立解析樹,生成執行計劃。
-
執行器:當有了解析樹和執行計劃之後,就知道了 SQL該怎麼被執行,這樣就可以在執行器中執行語句了。
MySQL 中的 SQL 是如何執行的
- 連線層:客戶端和伺服器端建立連線,客戶端傳送 SQL至伺服器端;
- SQL 層:對 SQL 語句進行查詢處理;
- 儲存引擎層:與資料庫檔案打交道,負責資料的儲存和讀取。
- 查詢快取:Server 如果在查詢快取中發現了這條 SQL 語句,就會直接將結果返回給客戶端;如果沒有,就進入到解析器階段。需要說明的是,因為查詢快取往往效率不高,所以在 MySQL8.0 之後就拋棄了這個功能。
- 解析器:在解析器中對 SQL 語句進行語法分析、語義分析。
- 優化器:在優化器中會確定 SQL 語句的執行路徑,比如是根據全表檢索,還是根據索引來檢索等。
- 執行器:在執行之前需要判斷該使用者是否具備許可權,如果具備許可權就執行 SQL 查詢並返回結果。在 MySQL8.0 以下的版本,如果設定了查詢快取,這時會將查詢結果進行快取。
與 Oracle 不同的是,MySQL 的儲存引擎採用了外掛的形式,每個儲存引擎都面向一種特定的資料庫應用環境。同時開源的 MySQL 還允許開發人員設定自己的儲存引擎,下面是一些常見的儲存引擎:
- InnoDB 儲存引擎:它是 MySQL 5.5 版本之後預設的儲存引擎,最大的特點是支援事務、行級鎖定、外來鍵約束等。
- MyISAM 儲存引擎:在 MySQL 5.5 版本之前是預設的儲存引擎,不支援事務,也不支援外來鍵,最大的特點是速度
快,佔用資源少。 - Memory 儲存引擎:使用系統記憶體作為儲存介質,以便得到更快的響應速度。不過如果 mysqld 程式崩潰,則會導致所有的資料丟失,因此我們只有當資料是臨時的情況下才使用 Memory 儲存引擎。
- NDB 儲存引擎:也叫做 NDB Cluster 儲存引擎,主要用於 MySQL Cluster 分散式叢集環境,類似於 Oracle 的RAC 叢集。
- Archive 儲存引擎:它有很好的壓縮機制,用於檔案歸檔,在請求寫入時會進行壓縮,所以也經常用來做倉庫。
相關文章
- sql更新是如何執行的?SQL
- sql查詢是如何執行的?SQL
- 17.Sql是如何執行的SQL
- 一條update SQL語句是如何執行的SQL
- 一條SQL更新語句是如何執行的SQL
- 一條SQL更新語句是如何執行的?SQL
- 一條更新的SQL語句是如何執行的?SQL
- 一條 SQL 查詢語句是如何執行的?SQL
- 輸入的查詢 SQL 語句,是如何執行的?SQL
- 一條sql語句在mysql中是如何執行的MySql
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- sql語句如何執行的SQL
- MySQL日誌(一條sql更新語句是如何執行的)MySql
- 給隔壁的妹子講『一個SQL語句是如何執行的?』SQL
- c++是如何執行的C++
- Java Main 如何是如何被執行的?JavaAI
- 決定一個SQL執行效率的是執行計劃, 而不是SQL的寫法SQL
- 爬蟲代理是如何執行的?爬蟲
- 如何檢視SQL的執行計劃SQL
- 執行緒池中多餘的執行緒是如何回收的?執行緒
- 02 | 日誌系統:一條SQL更新語句是如何執行的?SQL
- SQL的執行SQL
- Python是如何編譯執行的Python編譯
- 代理伺服器是如何執行的?伺服器
- 01 | 基礎架構:一條SQL查詢語句是如何執行的?架構SQL
- MySQL資料庫詳解(一)SQL查詢語句是如何執行的?MySql資料庫
- 一文讀懂一條 SQL 查詢語句是如何執行的SQL
- mysql如何跟蹤執行的sql語句MySql
- 單執行緒的js是如何工作的執行緒JS
- JVM中的Hello World是如何執行的?JVM
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- 多執行緒程式是如何執行程式碼的?執行緒行程
- 如何偵查SQL執行狀態SQL
- 面試官問你MyBatis SQL是如何執行的?把這篇文章甩給他面試MyBatisSQL
- AutoTRACE是分析SQL的執行計劃,執行效率的一個非常簡單方便的工具SQL
- 一條SQL語句在MySQL中如何執行的MySql
- php如何嫵媚地生成執行的sql語句PHPSQL
- SQL的執行計劃SQL