mysql 1條sql事如何運行的

==1


邏輯架構(gòu)

1.MySQL的框架有幾個組件, 各是什么作用?
2.Server層和存儲引擎層各是什么作用?
3.you have an error in your SQL syntax 這個保存是在詞法分析里還是在語法分析里報錯?
4.對于表的操作權(quán)限驗證在哪里進行?
5.執(zhí)行器的執(zhí)行查詢語句的流程是什么樣的?
連接器的權(quán)限和優(yōu)化器的權(quán)限?

==2 redo bin日志


redolog

1 redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 層實現(xiàn)的,所有引擎都可以使用。
2 redo log 是物理日志,記錄的是“在某個數(shù)據(jù)頁上做了什么修改”;binlog 是邏輯日志,記錄的是這個語句的原始邏輯,比如“給 ID=2 這一行的 c 字段加 1 ”。
3 redo log 是循環(huán)寫的,空間固定會用完;binlog 是可以追加寫入的?!白芳訉憽笔侵?binlog 文件寫到一定大小后會切換到下一個,并不會覆蓋以前的日志。


update流程

redo是為了 crash-safe binlog是為了恢復(fù)
  1. redo log的概念是什么? 為什么會存在.
  2. 什么是WAL(write-ahead log)機制, 好處是什么.
  3. redo log 為什么可以保證crash safe機制.
  4. binlog的概念是什么, 起到什么作用, 可以做crash safe嗎?
  5. binlog和redolog的不同點有哪些?
  6. 物理一致性和邏輯一直性各應(yīng)該怎么理解?
  7. 執(zhí)行器和innoDB在執(zhí)行update語句時候的流程是什么樣的?
  8. 如果數(shù)據(jù)庫誤操作, 如何執(zhí)行數(shù)據(jù)恢復(fù)?
  9. 什么是兩階段提交, 為什么需要兩階段提交, 兩階段提交怎么保證數(shù)據(jù)庫中兩份日志間的邏輯一致性(什么叫邏輯一致性)?
  10. 如果不是兩階段提交, 先寫redo log和先寫bin log兩種情況各會遇到什么問題?

==3事務(wù)隔離
1讀未提交是指,一個事務(wù)還沒提交時,它做的變更就能被別的事務(wù)看到。
2讀提交是指,一個事務(wù)提交之后,它做的變更才會被其他事務(wù)看到。oracle
3可重復(fù)讀是指,一個事務(wù)執(zhí)行過程中看到的數(shù)據(jù),總是跟這個事務(wù)在啟動時看到的數(shù)據(jù)是一致的。當(dāng)然在可重復(fù)讀隔離級別下,未提交變更對其他事務(wù)也是不可見的。
4串行化,顧名思義是對于同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。當(dāng)出現(xiàn)讀寫鎖沖突的時候,后訪問的事務(wù)必須等前一個事務(wù)執(zhí)行完成,才能繼續(xù)執(zhí)行。


事務(wù)隔離的實現(xiàn)--重復(fù)讀

就是當(dāng)系統(tǒng)里沒有比這個回滾日志更早的 read-view 的時候 回滾日志刪除
1.事務(wù)的概念是什么?
2.mysql的事務(wù)隔離級別讀未提交, 讀已提交, 可重復(fù)讀, 串行各是什么意思?
3.讀已提交, 可重復(fù)讀是怎么通過視圖構(gòu)建實現(xiàn)的?
4.可重復(fù)讀的使用場景舉例? 對賬的時候應(yīng)該很有用?
5.事務(wù)隔離是怎么通過read-view(讀視圖)實現(xiàn)的?
6.并發(fā)版本控制(MCVV)的概念是什么, 是怎么實現(xiàn)的?
7.使用長事務(wù)的弊病? 為什么使用常事務(wù)可能拖垮整個庫?
8.事務(wù)的啟動方式有哪幾種?
9.commit work and chain的語法是做什么用的?
10.怎么查詢各個表中的長事務(wù)?
11.如何避免長事務(wù)的出現(xiàn)?

==4索引1


hash表

hash表 keyhash value 放數(shù)組
哈希表這種結(jié)構(gòu)適用于只有等值查詢的場景,Memcached 及其他一些 NoSQL 引擎。


有序數(shù)組

有序數(shù)組在等值查詢和范圍查詢場景中的性能就都非常優(yōu)秀
有序數(shù)組索引只適用于靜態(tài)存儲引擎


二叉樹

N叉樹、跳表、LSM樹,innodb 整數(shù)字段 的N 是1200


image.png

表中 R1~R5 的 (ID,k) 值分別為 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6),兩棵樹的示例示意圖如上。

如果語句是 select * from T where ID=500,即主鍵查詢方式,則只需要搜索 ID 這棵 B+ 樹;
如果語句是 select * from T where k=5,即普通索引查詢方式,則需要先搜索 k 索引樹,得到 ID 的值為 500,再到 ID 索引樹搜索一次。這個過程稱為回表。

顯然,主鍵長度越小,普通索引的葉子節(jié)點就越小,普通索引占用的空間也就越小。

只有一個索引;該索引必須是唯一索引。-->KV

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容