MySQL筆記

Shinoburedo發表於2024-06-24

1、檔案型別
.frm 表結構
.myd 表資料
.myi 表索引
.logbin 主從複製
.errlog 錯誤日誌

2、架構
A、連線層(連線驅動,常用JDBC)
B、服務層(攔截器、分析器、最佳化器、過濾器)
C、儲存引擎(MyIsAm、Innodb)
D、檔案服務(磁碟IO操作)

3、資料庫查詢的執行順序
from table -> inner/left/right/outer join on -> where -> group by -> having -> select -> order by

4、索引
A、索引型別
主鍵索引、唯一索引、複合索引、單值索引、覆蓋索引
B、索引失效原因
最左原則
不在索引列進行函式、運算、型別轉換(自動和手動)操作
範圍查詢後後欄位會索引失效,所以避免在複合索引列前面進行or、in、大小比較,會導致後面索引失效
like的%號開始的模糊查詢,我們一般採用覆蓋索引來解決like的%號開始的模糊查詢索引失效問題
order by 索引欄位順序,以及多欄位排序asc、desc混用,要看索引建立的順序是否一致
group by分組
C、慢查詢最佳化
explain
id 查詢的執行順序(越大越先執行)
select_type 查詢型別(普通型別、主查詢、子查詢)
ref 查詢級別 system(系統級)->const(常量)->ref_unique(唯一索引)->ref(非唯一索引)->index(索引)->range(範圍)->ALL(全表掃描)
possible_keys 可能用到的索引名稱
keys 實際用到的索引名稱
rows 讀取資料掃描的資料行數
ref 用到的索引的列或常量 const,columnName
Extra 查詢用到的條件 Using Temporary(使用臨時表)、Using Filesort(使用內排序)、Using Where(使用條件查詢)、Using Index(使用索引)
D、慢查詢日誌
設定配置檔案,開啟慢查詢日誌,慢查詢日誌設定掃描慢查詢的時間(預設10s)
使用命令查詢慢查詢時間或者慢查詢次數最多的前多少條資料顯示

5、資料庫
特點:ACID
原子性:事務裡面的操作要麼全部執行要麼全部回滾。
一致性:事務前後,狀態一致。
隔離性:事務的執行環境是獨立的,不受事務外的操作所影響。
永續性:事務提交以後,資料永久儲存到磁碟,不受系統錯誤或崩潰的影響。

事務的隔離級別:
讀未提交
讀已提交
不可重複讀
序列化

髒讀:A讀到B未提交的資料,讀到未提交的資料
不可重複讀:B在A重複讀之間更改了A讀取的資料,資料內容不一致
幻讀:A讀到B操作前後的資料,資料量不一致

6、鎖
MyIsAm(偏讀的儲存引擎、不支援事務)
讀鎖(共享鎖),不阻塞其他程序的讀操作,會阻塞寫操作
寫鎖(獨享鎖),會阻塞其他程序的讀寫操作,所以該儲存引擎適用於偏讀的服務
Innodb(適合高併發、支援事務、行級鎖)
行鎖,不阻塞其他程序的讀操作,會阻塞寫操作,顆粒度只鎖定處理的行(如果where條件沒有使用索引可能導致全表掃描,鎖住整張表)
表鎖
間隙鎖:處理資料使用範圍,則範圍的所有間隙都會上鎖,例如select ... where id > 0 and id < 10 for update;就算資料沒有id=6的,也無法進行插入操作,或者將其他id更新至該範圍中
如何鎖定一行
select ... from ...where id = 1 for update;
直到事務提交才解除

7、主從複製
從機slave 從主機master拉取主機的binary log二進位制日誌檔案
slave的IO執行緒會自動拉取master的binary log檔案到slave從機中
slave的SQL執行緒會自動複製從master拉取的binary log檔案資料到中繼日誌中,然後解析執行sql檔案,完成複製

A、配置主機master,server_id = 1,配置從機白名單ip和賬號配置,開啟主從複製
B、配置從機slave,server_id = 2,配置開啟主從複製,主線問題可以關閉同步

相關文章