mysql的sql語句執行流程
1、client和server建立連線,client傳送sql至server(對應聯結器這一過程)
2、server如果在查詢快取中發現了該sql,則直接使用查詢快取的結果返回給client,如果查詢快取中沒有,則進入下面的步驟(對應查詢快取這一過程,8.0這一過程已經不存在了,8.0完全拋棄了這個功能)
3、server對sql進行語法分析,識別出sql裡面的字串是否符合標準,比如select關鍵字不能寫錯(對應分析器這一過程)
4、server對sql進行語義分析,識別出sql裡面的字串的具體意思是什麼,比如T1是表名,C1是列名(對應分析器這一過程。3、4步其實解析的過程,這個解析的過程是分析器的工作不是最佳化器的工作)
5、server確定sql的執行路徑,比如走索引還是全表,多表連線時哪張表先走哪張表後走,當你的where條件的可讀性和效率有衝突時mysql內部還會自動進行最佳化,也就是大家理解的重寫where子句(對應最佳化器這一過程)
6、server對執行sql的使用者進行許可權檢查,比如對錶是否有許可權執行(對應執行器這一過程)
7、server執行該sql語句,傳送結果給client(對應執行器這一過程)
聯結器-->查詢快取-->分析器-->最佳化器-->執行器
如果表 T1 中沒有欄位 C1,而執行select * from T1 where C1=1會報錯不存在C1這個列,這個過程對應上面第4個過程,對應分析器這一過程
如果使用者對T1表沒有許可權,而執行select * from T1 where C1=1會報錯對錶T1沒有許可權,這個過程對應上面第6個過程,對應執行器這一過程
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2222570/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql執行sql語句過程MySql
- MySQL cron定時執行SQL語句MySql
- mysql sql語句執行超時設定MySql
- sql語句如何執行的SQL
- 一條SQL語句在MySQL中如何執行的MySql
- oracle常用後臺程序及sql語句執行流程OracleSQL
- 解析MySQL基礎架構及一條SQL語句的執行流程和流轉MySql架構
- SQL 語句的執行順序SQL
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- 一條sql語句在mysql中是如何執行的MySql
- SQL語句執行順序SQL
- 一條更新語句的執行流程
- mySQL 執行語句執行順序MySql
- MySQL 記錄所有執行了的 sql 語句MySql
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- MySQL日誌(一條sql更新語句是如何執行的)MySql
- Laravel 獲取執行的sql語句LaravelSQL
- mysql 語句的執行順序MySql
- MySQL探祕(二):SQL語句執行過程詳解MySql
- Mybatis 動態執行SQL語句MyBatisSQL
- 後臺執行SQL語句(oracle)SQLOracle
- sql語句執行緩慢分析SQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- MySQL語句執行分析(一)MySql
- MySQL語句執行分析(二)MySql
- 一條查詢語句的執行流程
- SQL Server 查詢歷史執行的SQL語句SQLServer
- MySQL系列之一條SQL查詢語句的執行過程MySql
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 一條sql語句的執行過程SQL
- SQL語句各子句的執行順序SQL
- sql查詢語句流程SQL
- java連線oracle執行sql語句JavaOracleSQL
- 原始碼解析MyBatis Sharding-Jdbc SQL語句執行流程詳解(文末有流程圖)原始碼MyBatisJDBCSQL流程圖
- python關於pymysql 執行sql語句in的用法PythonMySql
- 一條SQL更新語句是如何執行的?SQL
- Hive SQL語句的正確執行順序HiveSQL
- 一條SQL更新語句是如何執行的SQL