MySQL架構
mysql架構圖:
mysql查詢語句限制性from語句
mysql分層以及可插拔的存儲引擎
- 連接層
- 服務層
- 存儲引擎層
- 數據存儲層
sql語句:
show engines; 查看當前支持的存儲引擎
show variables like '%storage_engine%'; 查看當前默認存儲引擎
MyISAM和InnoDB的區別:
MySQL優化分析:
創建索引:create index ind_user_name【索引名稱】 on user【表名】(`name`【字段名稱】);
SQL執行順序:
我們手寫SQL的順序:
mysql解析SQL順序:
MySQL JOIN連接
索引:
基本概念:
優劣勢:
索引分類:
實際應用過程中建複合索引>單值索引
B-TREE:
性能分析:
mysql查詢優化器:
Explain:
explain各字段解釋:
type:
extra:
索引優化:
索引失效原因:
根據上圖,使用like查詢時,如果左邊有%,則會發生全表掃描問題,如果like的時候必須使用左右%且要求用上索引,那麼需要使用覆蓋索引來解決,也就是隻查添加索引的字段
儘量使用組合索引,遵循最左前綴原則;like左邊帶%無法使用索引,是因爲匹配字段的開頭是不確定的字段數量和內容,無法使用索引進行檢索,左側無%能使用索引是因爲左側開頭能夠確定字母,例如是k%,那麼mysql最起碼可以直接根據索引的排序功能先從k開頭的索引進行查找
索引的作用有兩個:1.檢索;2.排序;檢索意味着條件查詢,排序意味着大於、小於、排序等操作有效
group by基本上都需要進行排序,會有臨時表生成
查詢截取分析:
大綱:
mysql優化步驟:
查詢優化:
order by:
group by:
慢查詢:
使用set global slow_query_log=1默認本次生效,重啓mysql後失效。
set global long_query_time=3;
使用select sleep(4);執行長時間查詢來測試是否開啓慢查詢成功。
查詢當前系統中記錄的慢查詢sql條數:show global status like '%Slow_queries%';
showProfile:
開啓showProfile
例如:show profile cpu,block io for query 1;
上方相關查詢參數:
日常開發過程中當使用showProfil工具分析時,如果出現以下四點那麼需要注意:
全局查詢日誌:
mysql鎖機制:
按照對鎖的操作類型分爲讀鎖和寫鎖:
按照鎖的粒度分爲表鎖和行鎖。
表鎖:
show open tables;查看當前數據庫的表的狀態,包含鎖信息。
給表解鎖:unlock tables;
讀鎖:
寫鎖:
總結:
行鎖:
特點:
併發事務帶來的問題:
事務的隔離級別:
行鎖:
更新數據時索引失效會導致行鎖升級爲表鎖:
例如b字段是varchar類型,從前面的章節我們知道查詢時,條件中如果varchar類型沒有加單引號,會導致索引失效;同樣的如果在更新的時候,如update table set a=xxx where b=xxx,此處b沒有加單引號會導致索引失效,最終導致行鎖變成表鎖。
間隙鎖:
總結:
查看當前數據庫的連接:
show processlist命令的輸出結果顯示了有哪些線程在運行,不僅可以查看當前所有的連接數,還可以查看當前的連接狀態幫助識別出有問題的查詢語句等。
主從複製:
一主一從常見配置:
本例中master節點是windows,slave節點是linux。
主機配置(windows):
從機配置(linux):
主機授權給從機訪問數據庫:
從機配置需要複製的主機: