數據庫的操做方式有許多種,可是MySql的工做流程數怎樣的呢?
客戶端mysql
執行sql語句與服務器進行鏈接
查詢緩存redis
執行下面的語句查看MySql默認緩存是否關閉
show variables like 'query_cache%';
默認是關閉的,咱們在使用的通常不使用默認的緩存,都是使用一些專門的緩存器,如 redis,還有Mybatis的一級緩存之類的;
咱們不是用MySql默認的緩存主要是由於sql語句改變或者任意一條數據發生變化都直接失效了;
解析器和預處理sql
咱們在查詢的時候爲何sql語句出現語法的錯誤時候會報錯呢?
這就是依靠解析器和預處理器來進行處理解析的
解析器:會對一個完整的sql語句進行打碎,獲得一個個單詞,獲得的是什麼類型的語句 預處理器:根據MySql的語句規則,對sql進行語法的解析,生成數據結構,獲得一個解析樹;
查詢優化器數據庫
咱們所使用的sql語句到mysql服務器中不是最終結果,而優化器會對解析器生成的解析樹生成不一樣的執行計劃,選擇最優的執行計劃,而mysql中使用的優化器是基於開銷的優化器,咱們要選用開銷最小的優化器;
在使用sql語句的時候能夠使用EXPLAIN
關鍵字加在語句的最前面查看執行計劃;
存儲引擎緩存
咱們的數據存儲的數據庫中,對於不一樣的存儲引擎對於不一樣的需求進行而建立的;
`show table status from `tableName`;`
使用上述語句能夠查看使用的存儲引擎
若是對數據一致性要求比較高,須要事務支持,能夠選擇 InnoDB。 若是數據查詢多更新少,對查詢性能要求比較高,能夠選MyISAM。 若是須要一個用於查詢的臨時表,能夠選擇 Memory。