1.mysql可以分為 server層和儲存引擎兩層
service層完成連線,查詢快取,分析器,優化器,執行器 以及各種函式,和所有跨儲存引擎實現的功能 比如說觸發器,觸發器,儲存過程,檢視等。
儲存引擎負責資料的儲存和提取,其架構模式是外掛程式式的,支援innodb myisam memory等 ,innodb在5.5以後為預設的。
2.連線
長連線為建立之後,客戶端如果持續有請求,就一直使用這個連線,短連線為每次執行很少的幾個請求,就斷開,下次重新連。
連線不用時為空閒狀態(sleep)。
show processlist 可以看連線狀態
長連線的好處,建立連線是比較耗資源的,可以節省時間,壞處是 mysql使用過程中臨時記憶體是管理在連線物件上的,如果該連線一直不釋放,
mysql的占用的記憶體會越來越大, 可能導致記憶體占用太大,被系統強行殺掉,在現象上看就是mysql異常重啟了。
解決方案:
1.定時斷開,或者程式裡面判斷執行過大查詢之後 斷開連線,下次用新的。
2.mysql 5.7版本之後,使用 mysql_reset_connection 命令 重置連線資源,這個操作不需要重連和許可權校驗。
3.查詢快取
mysql將查詢sql 以 key-value形式儲存起來,key為sql語句,value為查詢出來的結果,這樣查詢的時候,如果快取中有,則取快取中的。
但是不建議使用快取,因為當這張表有更新的時候,整個表的快取都會失效,在經常更新的表中,快取失效是非常快的。
在mysql8.0之後 這個功能已經被移除了。
3.分析器
如果沒有命中快取, 則開始真正執行sql,首先就會先執行分析器,對sql進行詞法解析,將關鍵字 以及每個字串代表的含**析出來,
比如說 列id 表名 這些,這裡面也會去驗證 表 列 是否存在,不存在則報錯, 因為表 和列 是定義好的資料結構,並不需要真正去開啟表才知道。
然後語法分析,判斷是否是滿足語法,如果不滿足 也報錯。
4.優化器
優化器是在表裡面有多個索引的時候,決定使用哪個索引,或者在多表關聯的時候,決定關聯順序。
5.執行器
執行器階段,就是先判斷有沒有對該錶的操作許可權,然後呼叫儲存引擎的介面,返回資料。
對於沒有索引的表,就是先通過儲存引擎取第一條資料,判斷符不符合條件,如果符合 就放到結果集中
然後取下一條資料,再判斷,重複以上,直到該錶的最後一條資料為止。 這就是全表掃瞄。
對於有索引的表,則是先取「符合條件的第一條資料」,判斷,取符合條件的第二條數… 直到符合條件的最後一條資料。
因此避免了全表掃瞄。
MySQL學習系列一
看了 mysql核心技術手冊 在這裡整理一下知識點。安全 使用者語句和函式 使用者的訪問許可權可以是全域性層級 伺服器上的所有資料庫 也可以是資料庫層級 表層級和列層級。使用者的許可權儲存在授權表中,位於伺服器的mysql資料庫中 user 全域性級許可權 db 資料庫層級許可權 tables pr...
mysql筆記大全 MySQL 筆記一
資料庫資料庫是資料儲存和管理的倉庫 資料庫分類早期 層次式資料庫 網路型資料庫 現在 關係型資料庫 底層以二維表的形式儲存資料的庫 非關係型資料庫 鍵值結構 包含關係乙個mysql伺服器裡包含多個資料庫,乙個資料庫又包含多個資料表,一張表可以記錄多條資料,每一行儲存具體的資料 sql語局分類dml ...
Mysql系列(一) Mysql體系結構
通過上圖可以看出mysql分為四層,分別為連線層 服務層 儲存引擎層 儲存層。連線層 連線池元件 服務層 從左向右分別為 管理服務和工具元件 sql介面元件 查詢分析器元件 優化器元件 緩衝元件 儲存引擎層 外掛程式式儲存引擎 儲存層 硬碟 物理檔案 圖中的ntfs ext2 3 4等為其硬碟格式 ...