mysql

劉大強分享 發佈 2024-05-05T00:55:49.707813+00:00

在MySQL命令中,欄位的類型長度TINYINT、INT不會影響數據的插入,只會在使用ZEROFILL時有用,讓查詢結果前填充. 嵌套循環連接 Nested-Loop Join 算法,適用於關聯欄位有索引。

描述下TINYINT(1)、INT(10)

在mysql命令中,欄位的類型長度TINYINT(2)、INT(11)不會影響數據的插入,只會在使用ZEROFILL時有用,讓查詢結果前填充.

mysql的表關聯常見有兩種算法

1、 嵌套循環連接 Nested-Loop Join(NLJ) 算法,適用於關聯欄位有索引

2、 基於塊的嵌套循環連接 Block Nested-Loop Join(BNL)算法,適用於關聯欄位沒有索引

講一下MVCC

undo日誌版本鏈是指一行數據被多個事務依次修改過後,在每個事務修改完後,Mysql會保留修改前的數據undo回滾日誌,並且用兩個隱藏欄位trx_id和roll_pointer把這些undo日誌串聯起來形成一個歷史記錄版本鏈,叫做一致性視圖read-view

可重複讀隔離級別(RR),當事務開啟,執行任何查詢sql時會生成當前事務的一致性視圖read-view,該視圖在事務結束之前都不會變化(如果是讀已提交隔離級別在每次執行查詢sql時都會重新生成).

innodd引擎執行的bufferPool機制

單雙路排序

單路:一次性取出所有欄位.在內存中排序

講一下mysql的雙寫

InnoDB 使用日誌先行策略,將數據修改先在內存中完成,並且將事務記錄成重做日誌(Redo Log),轉換為順序IO高效的提交事務.日誌記錄到資料庫以後,對應的事務就可以返回給用戶,表示事務完成。但是實際上,這個數據可能還只在內存中修改完,並沒有刷到磁碟上去。內存是易失的,如果在數據落地前,機器掛了,那麼這部分數據就丟失了。InnoDB 通過 redo 日誌來保證數據的一致性。如果保存所有的重做日誌,顯然可以在系統崩潰時根據日誌重建數據。

行鎖

InnoDB的行鎖是針對索引加的鎖,不是針對記錄加的鎖。並且該索引不能失效,否則都會從行鎖升級為.Next-Key Locks是行鎖與間隙鎖的組合。

關鍵字: