Mysql:一条sql是如何执行的?
生活随笔
收集整理的這篇文章主要介紹了
Mysql:一条sql是如何执行的?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- mysql的邏輯架構
- sql語句各關鍵字執行順序圖
mysql的邏輯架構
根據mysql的邏輯架構圖,我們可以看出Mysql可以分為Server層和存儲引擎層兩部分。
Server層:Server層包括連接器、查詢緩存、分析器、優化器、執行器等,涵蓋了Mysql中的大多數核心服務功能,以及所有的內置函數(如日期、時間、數學、加密函數等),所有跨存儲引擎的功能都在這一層實現,比如存儲過程、觸發器、視圖等。
存儲引擎層:存儲引擎層負責數據的存儲和提取。器架構模式是插件式的,支持InnoDB、MyISAM、Memory等多個存儲引擎。現在最常用的存儲引擎是InnoDB,它從MySQL5.5版本開始就成為了默認存儲引擎。例如需要指定存儲引擎可以在create table的時候使用engine=memory來指定內存引擎創建表。
需要注意的是在連接中盡量避免長連接,因為Mysql在執行過程中臨時使用的內存是管理在連接對象里面的,如果長連接累積下來可能導致內存占用太大,被系統強行殺掉(OOM),從現象看就是Mysql異常重啟了。
可以考慮兩種方案解決:
1.定期斷開長連接。使用一段時間,或者程序判斷執行過一個占用內存的大查詢后,斷開連接,之后查詢再重連。
2.如果使用的是Mysql5.7或者更新版本,可以在每次執行一個比較大的操作后,通過執行mysql_reset_connection來重新初始化連接資源。這個過程不需要重連和重新做權限驗證,但是會將連接恢復到剛剛創建完時的狀態。
但是大多數形況下,建議不要使用查詢緩存,因為查詢緩存往往弊大于利。
查詢緩存的失效非常頻繁,只要有對一個表的更新,這個表上所有的查詢緩存都會被清空。因此很可能查詢緩存還沒有使用就一個更新全清空了。對于更新壓力大的數據庫來說,查詢緩存的命中率會非常低。但是如果你使用的時配置表,也就是很長時間才會更新一次的表,那這張表上的查詢才適合使用查詢緩存。
Mysq可以設置參數query_cache_type為DEMAND就可以不使用查詢緩存了,這樣默認的sql語句就不使用查詢緩存了。如果確定要使用查詢緩存的語句可以使用SQL_CACHE顯示指定,例如下面:
注意:MYSQL8.0版本直接將查詢緩存的整塊功能刪掉了,8.0徹底沒有這個功能了。
sql語句各關鍵字執行順序圖
總結
以上是生活随笔為你收集整理的Mysql:一条sql是如何执行的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天学一点儿shell:xargs 命令
- 下一篇: 每天学一点儿shell:猜数字游戏