高效能MySQL概述

2021-10-13 05:32:15 字數 1417 閱讀 8268

mysql邏輯架構

事務的acid

隔離級別

四種隔離級別

隔離級別

髒讀不可重複讀

幻讀加鎖讀

read uncommitted

yesyes

yesno

read commited

noyes

yesno

repeatable read

nono

yesno

serializable

nono

noyes

mvcc(多版本併發控制)

mvcc的實現是通過儲存資料在某個時間點的快照來實現的。也就說,不管需要執行多長時間,每個事務看到的資料都是一致的。根據事務開始的時間不同,每個事務對同一張表,同一時刻看到的資料可能是不一樣的。

innodb的mvcc是通過在每行記錄後面儲存兩個隱藏列來實現的,乙個儲存了行的建立時間,乙個儲存行的過期時間(或刪除時間)。當然儲存的並不是實際時間值,而是系統版本號。每開始乙個事務,系統版本號就會自動遞增。事務開始時刻的系統版本號會作為事務的版本號,用來和查詢到的每行記錄的版本號進行比較。

在repeatable read隔離級別下,mvcc具體操作:

select

​ innodb會根據以下兩個條件檢查每行記錄:

​ a. innodb只查詢版本早於當前事務版本的資料行(也就是,行的系統版本號小於或等於事務的系統版本號)。這樣可以確保事務讀取的行,要麼是在事務開始之前已經存在的,要麼是事務自身插入或者修改過的。

​ b. 行的刪除版本要麼未定義,要麼大於當前事務版本號。這可以確保事務讀取到的行,在事務開始之前未被刪除。

只有符合上述兩個條件的記錄,才能返回作為查詢結果。

insert

​ innodb為新插入的每一行儲存當前系統版本號作為行版本號。

delete:

​ innodb為刪除的每一行儲存當前系統版本號作為行刪除標識。

update

​ innodb為插入一行新記錄,儲存當前系統版本號作為行版本號,同時儲存當前系統版本號到原來的行作為行刪除標識。

儲存這兩個額外系統版本號,使大數讀操作都可以不用加鎖。mvcc只在repeatable read和read commited兩個隔離級別下工作。因為read uncommitted總是讀取最新的資料行,而不是符合當前事務版本的資料行。而serializable則會對所有讀取的行都加鎖。

innodb和myisam儲存引擎

innodb儲存引擎

myisam儲存引擎

高效能mysql 樹 高效能mysql精要

1 explain 中 extra using index 表示覆蓋索引,sql優化中最好能使用覆蓋索引,否則 二級索引 需要回表查詢。所謂覆蓋索引,是指要查詢的列正好是索引,而條件也是這個索引之一 2 where 語句中 條件等於主鍵的 在核心索引層完成,條件等於非索引的,在服務層完成 3 讀索引...

mysql高效能索引 mysql高效能索引( )

在開發中,我們知道大多數應用的瓶頸在於sql語句的執行時耗,在這裡並不討論sql語句的安全,僅僅討論高效能sql語句,而與高效能sql語句緊密相連的就是傳說中的 索引。索引 一種工作在儲存引擎端的用於快速找到記錄的一種資料結構。mysql使用索引的方式是 先找到索引的值,再根據索引的值找到資料行。索...

高效能非同步爬蟲概述

同步呼叫 即提交乙個任務後就在原地等待任務結束,等到拿到任務的結果後再繼續下一行 效率低下,呼叫乙個任務,就在原地等待任務結束拿到結果後才繼續往後執行。好處 在伺服器端使用多執行緒 或多程序 的目的是讓每個連線都擁有獨立的執行緒 或程序 這樣任何乙個連線的阻塞都不會影響其他的連線。缺點 在遇到要同時...