《MySql高級技術篇》--學習筆記

MySQL架構

mysql架構圖:

 mysql查詢語句限制性from語句

mysql分層以及可插拔的存儲引擎

  1. 連接層
  2. 服務層
  3. 存儲引擎層
  4. 數據存儲層

 

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):

 

主機授權給從機訪問數據庫:

從機配置需要複製的主機:

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章