《第二講 一條更新sql是如何執行的》 讀書筆記

2021-10-03 07:56:19 字數 677 閱讀 2047

一條更新語句的執行跟查詢執行的流程是一樣的,也是如下圖:

不一樣的地方,會寫兩個日誌,兩段式提交:

redo log:在innodb寫,通過creach-safe模式寫。

bin log:在service寫,任何引擎都可以用,mysql公共執行日誌,記錄每一條語句執行。

redolog日誌在記憶體中是固定大小的,乙個組redo寫版是乙個1g,可以配置多組寫版。redo log是邊寫日誌到記憶體邊同步到磁碟。寫的指標為writepos,同步到磁碟的指標是checkpoint。當writepos要追趕checkpoint上時,這個時候就會停止下來擦除一些記錄,把checkpoint向前推。

bin log 是mysql serve層實現的,所有的引擎都可以用,記錄操作記錄。

當一條更新語句進入執行器後,先呼叫引擎介面,如果innodb判斷是否存在記憶體,如果存在就返回資料行,如果不存在就從磁碟讀入資料頁,然後返回行數。

server對行進行update操作。

通過引擎介面寫入新行,寫日rido日誌,此刻日誌處於prapare狀態。

server此時再寫bin log

提交事務,redo log處於commit狀態。

保證資料和日誌一致性

一條SQL更新語句是如何執行的

mysql create table t id int primary key,c int 如果要將id 2這一行的值加1,sql語句就會這麼寫 mysql update t set c c 1where id 2 執行語句前要先連線資料庫,這是聯結器的工作。在乙個表上有更新的時候,跟這個表有關的查...

一條SQL查詢語句是如何執行的

mysql可以分為server層和儲存引擎層兩部分 一條普通的查詢語是怎樣執行並返回結果了 聯結器查詢快取 大多數情況下建議不要使用查詢快取,查詢快取往往弊大於利。查詢快取的失效非常頻繁,只要有對乙個表的更新,這個表上所有的查詢快取都會被清空。分析器優化器 比如你執行下面這樣的語句,這個語句是執行兩...

一條SQL查詢語句是如何執行的?

我們在寫sql的時候crud這些基本的操作想必大家已經是得心應手了,專欄會更傾向於sql優化與執行過程模型的角度重新學習sql,方便大家在做效能優化上更加熟練。select from t where id 10 接下來我們來拆解一下這個sql語句,從中就可以看出sql在mysql中各個模組的執行過程...