精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試八股文之 MySQL

數(shù)據(jù)庫(kù) MySQL
本篇帶給大家三十五個(gè) MySQL 常見(jiàn)的小問(wèn)題,moon 濃縮成了精華,祝大家卷的愉快~

[[431243]]

一.說(shuō)一說(shuō)三大范式

  • 「第一范式」:數(shù)據(jù)庫(kù)中的字段具有「原子性」,不可再分,并且是單一職責(zé)
  • 「第二范式」:「建立在第一范式的基礎(chǔ)上」,第二范式要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須「可以被惟一地區(qū)分」。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)。這個(gè)惟一屬性列被稱為主鍵
  • 「第三范式」:「建立在第一,第二范式的基礎(chǔ)上」,確保每列都和主鍵列直接相關(guān),而不是間接相關(guān)不存在其他表的非主鍵信息

但是在我們的日常開(kāi)發(fā)當(dāng)中,「并不是所有的表一定要滿足三大范式」,有時(shí)候冗余幾個(gè)字段可以少關(guān)聯(lián)幾張表,帶來(lái)的查詢效率的提升有可能是質(zhì)變的

二.MyISAM 與 InnoDB 的區(qū)別是什么?

  • 「InnoDB支持事務(wù),MyISAM不支持」。
  • 「InnoDB 支持外鍵,而 MyISAM 不支持」。
  • 「InnoDB是聚集索引」,使用B+Tree作為索引結(jié)構(gòu),數(shù)據(jù)文件是和索引綁在一起的,必須要有主鍵。「MyISAM是非聚集索引」,也是使用B+Tree作為索引結(jié)構(gòu),索引和數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。
  • 「InnoDB 不保存表的具體行數(shù)」。「MyISAM 用一個(gè)變量保存了整個(gè)表的行數(shù)」。
  • Innodb 有 「redolog」 日志文件,MyISAM 沒(méi)有
  • 「Innodb存儲(chǔ)文件有frm、ibd,而Myisam是frm、MYD、MYI」
  • Innodb:frm是表定義文件,ibd是數(shù)據(jù)文件
  • Myisam:frm是表定義文件,myd是數(shù)據(jù)文件,myi是索引文件
  • 「InnoDB 支持表、行鎖,而 MyISAM 支持表級(jí)鎖」
  • 「InnoDB 必須有唯一索引(主鍵)」,如果沒(méi)有指定的話 InnoDB 會(huì)自己生成一個(gè)隱藏列Row_id來(lái)充當(dāng)默認(rèn)主鍵,「MyISAM 可以沒(méi)有」

三.為什么推薦使用自增 id 作為主鍵?

1.普通索引的 B+ 樹(shù)上存放的是主鍵索引的值,如果該值較大,會(huì)「導(dǎo)致普通索引的存儲(chǔ)空間較大」

2.使用自增 id 做主鍵索引新插入數(shù)據(jù)只要放在該頁(yè)的最尾端就可以,直接「按照順序插入」,不用刻意維護(hù)

3.頁(yè)分裂容易維護(hù),當(dāng)插入數(shù)據(jù)的當(dāng)前頁(yè)快滿時(shí),會(huì)發(fā)生頁(yè)分裂的現(xiàn)象,如果主鍵索引不為自增 id,那么數(shù)據(jù)就可能從頁(yè)的中間插入,頁(yè)的數(shù)據(jù)會(huì)頻繁的變動(dòng),「導(dǎo)致頁(yè)分裂維護(hù)成本較高」

四.一條查詢語(yǔ)句是怎么執(zhí)行的?

1.通過(guò)連接器跟客戶端「建立連接」

2.通過(guò)查詢「緩存查詢」之前是否有查詢過(guò)該 sql

有則直接返回結(jié)果

沒(méi)有則執(zhí)行第三步

3.通過(guò)分析器「分析該 sql 的語(yǔ)義」是否正確,包括格式,表等等

4.通過(guò)優(yōu)化器「優(yōu)化該語(yǔ)句」,比如選擇索引,join 表的連接順序

5.「驗(yàn)證權(quán)限」,驗(yàn)證是否有該表的查詢權(quán)限

  • 沒(méi)有則返回?zé)o權(quán)限的錯(cuò)誤
  • 有則執(zhí)行第六步

6.通過(guò)執(zhí)行器調(diào)用存儲(chǔ)引擎執(zhí)行該 sql,然后返回「執(zhí)行結(jié)果」

五.使用 Innodb 的情況下,一條更新語(yǔ)句是怎么執(zhí)行的?

用以下語(yǔ)句來(lái)舉例,c 字段無(wú)索引,id 為主鍵索引

  1. update T set c=c+1 where id=2; 

1.執(zhí)行器先找引擎取 id=2 這一行。id 是主鍵,引擎直接用樹(shù)搜索找到這一行

  • 如果 id=2 這一行所在的數(shù)據(jù)頁(yè)本來(lái)就「在內(nèi)存中」,就「直接返回」給執(zhí)行器
  • 「不在內(nèi)存」中,需要先從磁盤「讀入內(nèi)存」,然后再「返回」

2.執(zhí)行器拿到引擎給的行數(shù)據(jù),把這個(gè)值加上 1,比如原來(lái)是 N,現(xiàn)在就是 N+1,得到新的一行數(shù)據(jù),再調(diào)用引擎接口「寫入這行新數(shù)據(jù)」

3.引擎將這行新數(shù)據(jù)更新到內(nèi)存中,同時(shí)將這個(gè)更新操作「記錄到 redo log 里面」,此時(shí) redo log 處于 「prepare」 狀態(tài)。然后告知執(zhí)行器執(zhí)行完成了,隨時(shí)可以提交事務(wù)

4.執(zhí)行器「生成這個(gè)操作的 binlog」,并把 binlog 「寫入磁盤」

5.執(zhí)行器調(diào)用引擎的「提交事務(wù)」接口,引擎把剛剛寫入的 redo log 改成提交(commit)狀態(tài),「更新完成」

六.Innodb 事務(wù)為什么要兩階段提交?

  • 先寫 redolog 后寫binlog。假設(shè)在 redolog 寫完,binlog 還沒(méi)有寫完的時(shí)候,MySQL 進(jìn)程異常重啟,這時(shí)候 binlog 里面就沒(méi)有記錄這個(gè)語(yǔ)句。然后你會(huì)發(fā)現(xiàn),如果需要用這個(gè) binlog 來(lái)恢復(fù)臨時(shí)庫(kù)的話,由于這個(gè)語(yǔ)句的 「binlog 丟失」,這個(gè)臨時(shí)庫(kù)就會(huì)少了這一次更新,恢復(fù)出來(lái)的這一行 c 的值就是 0,與原庫(kù)的值不同。
  • 先寫 binlog 后寫 redolog。如果在 binlog 寫完之后 crash,由于 redolog 還沒(méi)寫,崩潰恢復(fù)以后這個(gè)事務(wù)無(wú)效,所以這一行c的值是0。但是 binlog 里面已經(jīng)記錄了“把c從0改成1”這個(gè)日志。所以,在之后用 binlog 來(lái)恢復(fù)的時(shí)候就「多了一個(gè)事務(wù)出來(lái)」,恢復(fù)出來(lái)的這一行 c 的值就是 1,與原庫(kù)的值不同。

可以看到,「如果不使用“兩階段提交”,那么數(shù)據(jù)庫(kù)的狀態(tài)就有可能和用它的日志恢復(fù)出來(lái)的庫(kù)的狀態(tài)不一致」。

七.什么是索引?

相信大家小時(shí)候?qū)W習(xí)漢字的時(shí)候都會(huì)查字典,想想你查字典的步驟,我們是通過(guò)漢字的首字母 a~z 一個(gè)一個(gè)在字典目錄中查找,最終找到該字的頁(yè)數(shù)。想想,如果沒(méi)有目錄會(huì)怎么樣,最差的結(jié)果是你有可能翻到字典的最后一頁(yè)才找到你想要找的字。

索引就「相當(dāng)于我們字典中的目錄」,可以極大的提高我們?cè)跀?shù)據(jù)庫(kù)的查詢效率。

八.索引失效的場(chǎng)景有哪些?

以下隨便列舉幾個(gè),不同版本的 mysql 場(chǎng)景不一

1.最左前綴法則(帶頭索引不能死,中間索引不能斷

2.不要在索引上做任何操作(計(jì)算、函數(shù)、自動(dòng)/手動(dòng)類型轉(zhuǎn)換),不然會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描

3.不能繼續(xù)使用索引中范圍條件(bettween、<、>、in等)右邊的列,如:

  1. select a from user where c > 5 and b = 4; 

4.索引字段上使用(!= 或者 < >)判斷時(shí),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描

5.索引字段上使用 is null / is not null 判斷時(shí),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描。

6.索引字段使用like以通配符開(kāi)頭(‘%字符串’)時(shí),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描,也是最左前綴原則。

7.索引字段是字符串,但查詢時(shí)不加單引號(hào),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描

8.索引字段使用 or 時(shí),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描

九.為什么采用 B+ 樹(shù),而不是 B-樹(shù)

B+ 樹(shù)只在葉子結(jié)點(diǎn)儲(chǔ)存數(shù)據(jù),非葉子結(jié)點(diǎn)不存具體數(shù)據(jù),只存 key,查詢更穩(wěn)定,增大了廣度,而一個(gè)節(jié)點(diǎn)就是磁盤一個(gè)內(nèi)存頁(yè),內(nèi)存頁(yè)大小固定,那么相比 B 樹(shù),B- 樹(shù)這些「可以存更多的索引結(jié)點(diǎn)」,寬度更大,樹(shù)高矮,節(jié)點(diǎn)小,拉取一次數(shù)據(jù)的磁盤 IO 次數(shù)少,并且 B+ 樹(shù)只需要去遍歷葉子節(jié)點(diǎn)就可以實(shí)現(xiàn)整棵樹(shù)的遍歷。而且在數(shù)據(jù)庫(kù)中基于范圍的查詢是非常頻繁的,效率更高。

十.WAl 是什么?有什么好處?

WAL 就是 Write-Ahead Logging,其實(shí)就是「所有的修改都先被寫入到日志中,然后再寫磁盤」,用于保證數(shù)據(jù)操作的原子性和持久性。

好處:

1.「讀和寫可以完全地并發(fā)執(zhí)行」,不會(huì)互相阻塞

2.先寫入 log 中,磁盤寫入從「隨機(jī)寫變?yōu)轫樞驅(qū)憽梗档土?client 端的延遲就。并且,由于順序?qū)懭氪蟾怕适窃谝粋€(gè)磁盤塊內(nèi),這樣產(chǎn)生的 io 次數(shù)也大大降低

3.寫入日志當(dāng)數(shù)據(jù)庫(kù)崩潰的時(shí)候「可以使用日志來(lái)恢復(fù)磁盤數(shù)據(jù)」

十一.什么是回表?

回表就是先通過(guò)數(shù)據(jù)庫(kù)索引掃描出該索引樹(shù)中數(shù)據(jù)所在的行,取到主鍵 id,再通過(guò)主鍵 id 取出主鍵索引數(shù)中的數(shù)據(jù),即基于非主鍵索引的查詢需要多掃描一棵索引樹(shù).

十二.什么是索引下推?

如果存在某些被索引的列的判斷條件時(shí),MySQL 將這一部分判斷條件傳遞給存儲(chǔ)引擎,然后由存儲(chǔ)引擎通過(guò)判斷索引是否符合 MySQL 服務(wù)器傳遞的條件,「只有當(dāng)索引符合條件時(shí)才會(huì)將數(shù)據(jù)檢索出來(lái)返回給 MySQL 服務(wù)器」 。

十三.什么是覆蓋索引?

覆蓋索引(covering index)指一個(gè)查詢語(yǔ)句的執(zhí)行只用從索引中就能夠取得,不必從數(shù)據(jù)表中讀取,可以減少回表的次數(shù)。比如:

  1. select id from t where age = 1; 

id 為主鍵索引,age 為普通索引,age 這個(gè)索引樹(shù)存儲(chǔ)的就是逐漸信息,可以直接返回

十四.什么是最左前綴原則?

最左前綴其實(shí)說(shuō)的是,在 where 條件中出現(xiàn)的字段,「如果只有組合索引中的部分列,則這部分列的觸發(fā)索引順序」,是按照定義索引的時(shí)候的順序從前到后觸發(fā),最左面一個(gè)列觸發(fā)不了,之后的所有列索引都無(wú)法觸發(fā)。

比如「有一個(gè) (a,b,c) 的組合索引」

  1. where a = 1 and b = 1 

此時(shí) a,b 會(huì)命中該組合索引

  1. where a = 1 and c = 1 

此時(shí) a 會(huì)命中該組合索引, c 不會(huì)

  1. where b = 1 and c = 1 

此時(shí)不會(huì)命中該組合索引

十五.普通索引和唯一索引該怎么選擇?

查詢

  • 當(dāng)普通索引為條件時(shí)查詢到數(shù)據(jù)會(huì)一直掃描,直到掃完整張表
  • 當(dāng)唯一索引為查詢條件時(shí),查到該數(shù)據(jù)會(huì)直接返回,不會(huì)繼續(xù)掃表

更新

  • 普通索引會(huì)直接將操作更新到 change buffer 中,然后結(jié)束
  • 唯一索引需要判斷數(shù)據(jù)是否沖突

所以「唯一索引更加適合查詢的場(chǎng)景,普通索引更適合插入的場(chǎng)景」

十六.什么是事務(wù)?其特性是什么?

事務(wù)是指是程序中一系列操作必須全部成功完成,有一個(gè)失敗則全部失敗。

特性

「1.原子性(Atomicity)」:要么全部執(zhí)行成功,要么全部不執(zhí)行。

「2.一致性(Consistency)」:事務(wù)前后數(shù)據(jù)的完整性必須保持一致。

「3.隔離性(Isolation)」:隔離性是當(dāng)多個(gè)事務(wù)同事觸發(fā)時(shí),不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。

「4.持久性(Durability)」:事務(wù)完成之后的改變是永久的。

十七.事務(wù)的隔離級(jí)別?

1.「讀提交」:即能夠「讀取到那些已經(jīng)提交」的數(shù)據(jù)

2.「讀未提交」:即能夠「讀取到?jīng)]有被提交」的數(shù)據(jù)

3.「可重復(fù)讀」:可重復(fù)讀指的是在一個(gè)事務(wù)內(nèi),最開(kāi)始讀到的數(shù)據(jù)和事務(wù)結(jié)束前的「任意時(shí)刻讀到的同一批數(shù)據(jù)都是一致的」

4.「可串行化」:最高事務(wù)隔離級(jí)別,不管多少事務(wù),都是「依次按序一個(gè)一個(gè)執(zhí)行」

「臟讀」

  • 臟讀指的是「讀到了其他事務(wù)未提交的數(shù)據(jù)」,未提交意味著這些數(shù)據(jù)可能會(huì)回滾,也就是可能最終不會(huì)存到數(shù)據(jù)庫(kù)中,也就是不存在的數(shù)據(jù)。讀到了并一定最終存在的數(shù)據(jù),這就是臟讀

「不可重復(fù)讀」

  • 對(duì)比可重復(fù)讀,不可重復(fù)讀指的是在同一事務(wù)內(nèi),「不同的時(shí)刻讀到的同一批數(shù)據(jù)可能是不一樣的」。

「幻讀」

  • 幻讀是針對(duì)數(shù)據(jù)插入(INSERT)操作來(lái)說(shuō)的。假設(shè)事務(wù)A對(duì)某些行的內(nèi)容作了更改,但是還未提交,此時(shí)事務(wù)B插入了與事務(wù)A更改前的記錄相同的記錄行,并且在事務(wù)A提交之前先提交了,而這時(shí),在事務(wù)A中查詢,會(huì)發(fā)現(xiàn)「好像剛剛的更改對(duì)于某些數(shù)據(jù)未起作用」,但其實(shí)是事務(wù)B剛插入進(jìn)來(lái)的這就叫幻讀

十八.binlog 是做什么的?

binlog 是歸檔日志,屬于 Server 層的日志,是一個(gè)二進(jìn)制格式的文件,用于「記錄用戶對(duì)數(shù)據(jù)庫(kù)更新的SQL語(yǔ)句信息」。

主要作用

  • 主從復(fù)制
  • 數(shù)據(jù)恢復(fù)

十九.undolog 是做什么的?

undolog 是 InnoDB 存儲(chǔ)引擎的日志,用于保證數(shù)據(jù)的原子性,「保存了事務(wù)發(fā)生之前的數(shù)據(jù)的一個(gè)版本,也就是說(shuō)記錄的是數(shù)據(jù)是修改之前的數(shù)據(jù),可以用于回滾」,同時(shí)可以提供多版本并發(fā)控制下的讀(MVCC)。

主要作用

  • 事務(wù)回滾
  • 實(shí)現(xiàn)多版本控制(MVCC)

二十.relaylog 是做什么的?

relaylog 是中繼日志,「在主從同步的時(shí)候使用到」,它是一個(gè)中介臨時(shí)的日志文件,用于存儲(chǔ)從master節(jié)點(diǎn)同步過(guò)來(lái)的binlog日志內(nèi)容。

master 主節(jié)點(diǎn)的 binlog 傳到 slave 從節(jié)點(diǎn)后,被寫入 relay log 里,從節(jié)點(diǎn)的 slave sql 線程從 relaylog 里讀取日志然后應(yīng)用到 slave 從節(jié)點(diǎn)本地。從服務(wù)器 I/O 線程將主服務(wù)器的二進(jìn)制日志讀取過(guò)來(lái)記錄到從服務(wù)器本地文件,然后 SQL 線程會(huì)讀取 relay-log 日志的內(nèi)容并應(yīng)用到從服務(wù)器,從而「使從服務(wù)器和主服務(wù)器的數(shù)據(jù)保持一致」。

二十一.redolog 是做什么的?

redolog 是 「InnoDB 存儲(chǔ)引擎所特有的一種日志」,用于記錄事務(wù)操作的變化,記錄的是數(shù)據(jù)修改之后的值,不管事務(wù)是否提交都會(huì)記錄下來(lái)。

可以做「數(shù)據(jù)恢復(fù)并且提供 crash-safe 能力」

當(dāng)有增刪改相關(guān)的操作時(shí),會(huì)先記錄到 Innodb 中,并修改緩存頁(yè)中的數(shù)據(jù),「等到 mysql 閑下來(lái)的時(shí)候才會(huì)真正的將 redolog 中的數(shù)據(jù)寫入到磁盤當(dāng)中」。

二十二.redolog 是怎么記錄日志的?

InnoDB 的 redo log 是固定大小的,比如可以配置為一組4個(gè)文件,每個(gè)文件的大小是1GB,那么總共就可以記錄4GB的操作。「從頭開(kāi)始寫,寫到末尾就又回到開(kāi)頭循環(huán)寫」。

所以,如果數(shù)據(jù)寫滿了但是還沒(méi)有來(lái)得及將數(shù)據(jù)真正的刷入磁盤當(dāng)中,那么就會(huì)發(fā)生「內(nèi)存抖動(dòng)」現(xiàn)象,從肉眼的角度來(lái)觀察會(huì)發(fā)現(xiàn) mysql 會(huì)宕機(jī)一會(huì)兒,此時(shí)就是正在刷盤了。

二十三.redolog 和 binlog 的區(qū)別是什么?

1.「redolog」 是 「Innodb」 獨(dú)有的日志,而 「binlog」 是 「server」 層的,所有的存儲(chǔ)引擎都有使用到

2.「redolog」 記錄了「具體的數(shù)值」,對(duì)某個(gè)頁(yè)做了什么修改,「binlog」 記錄的「操作內(nèi)容」

3.「binlog」 大小達(dá)到上限或者 flush log 「會(huì)生成一個(gè)新的文件」,而 「redolog」 有固定大小「只能循環(huán)利用」

4.「binlog 日志沒(méi)有 crash-safe 的能力」,只能用于歸檔。而 redo log 有 crash-safe 能力。

二十四.說(shuō)一說(shuō) mvcc 吧,有什么作用?

MVCC:多版本并發(fā)控制,是現(xiàn)代數(shù)據(jù)庫(kù)(包括 MySQL、Oracle、PostgreSQL 等)引擎實(shí)現(xiàn)中常用的處理讀寫沖突的手段,目的在于「提高數(shù)據(jù)庫(kù)高并發(fā)場(chǎng)景下的吞吐性能」。

在 MVCC 協(xié)議下,每個(gè)讀操作會(huì)看到一個(gè)一致性的快照,「這個(gè)快照是基于整個(gè)庫(kù)的」,并且可以實(shí)現(xiàn)非阻塞的讀,用于「支持讀提交和可重復(fù)讀隔離級(jí)別的實(shí)現(xiàn)」。

MVCC 允許數(shù)據(jù)具有多個(gè)版本,這個(gè)版本可以是時(shí)間戳或者是全局遞增的事務(wù) ID,在同一個(gè)時(shí)間點(diǎn),不同的事務(wù)看到的數(shù)據(jù)是不同的,這個(gè)修改的數(shù)據(jù)是「記錄在 undolog 中」的。

二十五.一條 Sql 語(yǔ)句查詢一直慢會(huì)是什么原因?

「1.沒(méi)有用到索引」

比如函數(shù)導(dǎo)致的索引失效,或者本身就沒(méi)有加索引

「2.表數(shù)據(jù)量太大」

考慮分庫(kù)分表吧

「3.優(yōu)化器選錯(cuò)了索引」

「考慮使用」 force index 強(qiáng)制走索引

二十六.一條 Sql 語(yǔ)句查詢偶爾慢會(huì)是什么原因?

「1. 數(shù)據(jù)庫(kù)在刷新臟頁(yè)」

比如 「redolog 寫滿了」,「內(nèi)存不夠用了」釋放內(nèi)存如果是臟頁(yè)也需要刷,mysql 「正常空閑狀態(tài)刷臟頁(yè)」

「2. 沒(méi)有拿到鎖」

二十七.Mysql 主從之間是怎么同步數(shù)據(jù)的?

1.master 主庫(kù)將此次更新的事件類型「寫入到主庫(kù)的 binlog 文件」中

2.master 「創(chuàng)建 log dump 線程通知 slave」 需要更新數(shù)據(jù)

3.「slave」 向 master 節(jié)點(diǎn)發(fā)送請(qǐng)求,「將該 binlog 文件內(nèi)容存到本地的 relaylog 中」

4.「slave 開(kāi)啟 sql 線程」讀取 relaylog 中的內(nèi)容,「將其中的內(nèi)容在本地重新執(zhí)行一遍」,完成主從數(shù)據(jù)同步

「同步策略」:

1.「全同步復(fù)制」:主庫(kù)強(qiáng)制同步日志到從庫(kù),等全部從庫(kù)執(zhí)行完才返回客戶端,性能差

2.「半同步復(fù)制」:主庫(kù)收到至少一個(gè)從庫(kù)確認(rèn)就認(rèn)為操作成功,從庫(kù)寫入日志成功返回ack確認(rèn)

二十八.主從延遲要怎么解決?

1.MySQL 5.6 版本以后,提供了一種「并行復(fù)制」的方式,通過(guò)將 SQL 線程轉(zhuǎn)換為多個(gè) work 線程來(lái)進(jìn)行重放

2.「提高機(jī)器配置」(王道)

3.在業(yè)務(wù)初期就選擇合適的分庫(kù)、分表策略,「避免單表單庫(kù)過(guò)大」帶來(lái)額外的復(fù)制壓力

4.「避免長(zhǎng)事務(wù)」

5.「避免讓數(shù)據(jù)庫(kù)進(jìn)行各種大量運(yùn)算」

6.對(duì)于一些對(duì)延遲很敏感的業(yè)務(wù)「直接使用主庫(kù)讀」

二十九.刪除表數(shù)據(jù)后表的大小卻沒(méi)有變動(dòng),這是為什么?

在使用 delete 刪除數(shù)據(jù)時(shí),其實(shí)對(duì)應(yīng)的數(shù)據(jù)行并不是真正的刪除,是「邏輯刪除」,InnoDB 僅僅是將其「標(biāo)記成可復(fù)用的狀態(tài)」,所以表空間不會(huì)變小

三十.為什么 VarChar 建議不要超過(guò)255?

當(dāng)定義varchar長(zhǎng)度小于等于255時(shí),長(zhǎng)度標(biāo)識(shí)位需要一個(gè)字節(jié)(utf-8編碼)

當(dāng)大于255時(shí),長(zhǎng)度標(biāo)識(shí)位需要兩個(gè)字節(jié),并且建立的「索引也會(huì)失效」

三十一.分布式式事務(wù)怎么實(shí)現(xiàn)?

1.「本地消息表」

2.「消息事務(wù)」

3.「二階段提交」

4.「三階段提交」

5.「TCC」

6.「最大努力通知」

7.「Seata 框架」

七種分布式事務(wù)的解決方案,一次講給你聽(tīng)

三十二.Mysql 中有哪些鎖?

以下并不全,主要理解下鎖的意義即可

  • 基于鎖的屬性分類:共享鎖、排他鎖
  • 基于鎖的粒度分類:表鎖、行鎖、記錄鎖、間隙鎖、臨鍵鎖
  • 基于鎖的狀態(tài)分類:意向共享鎖、意向排它鎖、死鎖

三十三.為什么不要使用長(zhǎng)事務(wù)?

1.并發(fā)情況下,數(shù)據(jù)庫(kù)「連接池容易被撐爆」

2.「容易造成大量的阻塞和鎖超時(shí)」

長(zhǎng)事務(wù)還占用鎖資源,也可能拖垮整個(gè)庫(kù),

3.執(zhí)行時(shí)間長(zhǎng),容易造成「主從延遲」

4.「回滾所需要的時(shí)間比較長(zhǎng)」

事務(wù)越長(zhǎng)整個(gè)時(shí)間段內(nèi)的事務(wù)也就越多

5.「undolog 日志越來(lái)越大」

長(zhǎng)事務(wù)意味著系統(tǒng)里面會(huì)存在很老的事務(wù)視圖。由于這些事務(wù)隨時(shí)可能訪問(wèn)數(shù)據(jù)庫(kù)里面的任何數(shù)據(jù),所以這個(gè)事務(wù)提交之前,數(shù)據(jù)庫(kù)里面它可能用到的回滾記錄都必須保留,這就會(huì)導(dǎo)致大量占用存儲(chǔ)空間。

三十四.buffer pool 是做什么的?

buffer pool 是一塊內(nèi)存區(qū)域,為了「提高數(shù)據(jù)庫(kù)的性能」,當(dāng)數(shù)據(jù)庫(kù)操作數(shù)據(jù)的時(shí)候,把硬盤上的數(shù)據(jù)加載到 buffer pool,不直接和硬盤打交道,操作的是 buffer pool 里面的數(shù)據(jù),數(shù)據(jù)庫(kù)的增刪改查都是在 buffer pool 上進(jìn)行

buffer pool 里面緩存的數(shù)據(jù)內(nèi)容也是一個(gè)個(gè)數(shù)據(jù)頁(yè)

其中「有三大雙向鏈表」:

「free 鏈表」

  • 用于幫助我們找到空閑的緩存頁(yè)

「flush 鏈表」

  • 用于找到臟緩存頁(yè),也就是需要刷盤的緩存頁(yè)

「lru 鏈表」

  • 用來(lái)淘汰不常被訪問(wèn)的緩存頁(yè),分為熱數(shù)據(jù)區(qū)和冷數(shù)據(jù)區(qū),冷數(shù)據(jù)區(qū)主要存放那些不常被用到的數(shù)據(jù)

預(yù)讀機(jī)制:

Buffer Pool 有一項(xiàng)特技叫預(yù)讀,存儲(chǔ)引擎的接口在被 Server 層調(diào)用時(shí),會(huì)在響應(yīng)的同時(shí)進(jìn)行預(yù)判,將下次可能用到的數(shù)據(jù)和索引加載到 Buffer Pool

三十五.說(shuō)說(shuō)你的 Sql 調(diào)優(yōu)思路吧

1.「表結(jié)構(gòu)優(yōu)化」

1.1拆分字段

1.2字段類型的選擇

1.3字段類型大小的限制

1.4合理的增加冗余字段

1.5新建字段一定要有默認(rèn)值

2.「索引方面」

2.1索引字段的選擇

2.2利用好mysql支持的索引下推,覆蓋索引等功能

2.3唯一索引和普通索引的選擇

3.「查詢語(yǔ)句方面」

3.1避免索引失效

3.2合理的書寫where條件字段順序

3.3小表驅(qū)動(dòng)大表

3.4可以使用force index()防止優(yōu)化器選錯(cuò)索引

4.「分庫(kù)分表」

 

責(zé)任編輯:姜華 來(lái)源: moon聊技術(shù)
相關(guān)推薦

2021-11-04 14:32:17

Spring 面試作用域

2021-10-21 14:43:23

Java 語(yǔ)言 Java 基礎(chǔ)

2021-07-26 14:59:23

面試Redis內(nèi)存數(shù)據(jù)庫(kù)

2021-09-07 14:46:42

面試網(wǎng)絡(luò)HTTP 協(xié)議

2024-02-23 19:17:12

構(gòu)造函數(shù)C++開(kāi)發(fā)

2025-10-15 03:00:00

2023-11-28 18:09:49

Java多態(tài)

2022-09-03 11:36:11

Python文件網(wǎng)絡(luò)

2021-10-26 17:05:55

Redis字符串復(fù)雜度

2021-05-06 07:27:57

面試任務(wù)調(diào)度器

2021-08-01 22:59:43

Object八股文quals

2023-11-29 17:28:07

2021-04-14 10:02:59

網(wǎng)絡(luò)八股文協(xié)議

2021-05-20 11:43:57

操作系統(tǒng)硬件軟件

2021-08-12 09:28:24

Java多線程變量

2025-08-07 09:17:37

2024-10-12 09:26:32

線程池系統(tǒng)核心線程

2023-01-13 18:04:03

面試題消息中間件

2024-06-05 10:59:51

2023-12-12 13:38:00

Java異步編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

538视频在线| 99精品人妻无码专区在线视频区| 蜜桃精品wwwmitaows| 色综合天天狠狠| 亚洲精品乱码视频| 亚洲av永久无码国产精品久久| 国产精品一页| 久久伊人精品天天| 韩国无码一区二区三区精品| 精品女同一区二区三区在线观看| 亚洲一区二区三区在线| 婷婷五月色综合| 成人免费公开视频| 七七婷婷婷婷精品国产| 97久久久久久| 久久久久久久久久久久久女过产乱| 黑人久久a级毛片免费观看| 欧美性大战久久久久久久蜜臀| 日产精品久久久久久久蜜臀| 成人精品一区二区三区免费| 成人av网站大全| 91精品在线一区| 成人毛片一区二区三区| 亚洲精品护士| 美女999久久久精品视频| 亚洲av无码一区二区三区人| 91精品国产自产在线丝袜啪 | 一级黄色av片| 好看不卡的中文字幕| 俺去了亚洲欧美日韩| av电影网站在线观看| 久久影院资源站| 日韩手机在线导航| www.这里只有精品| 亚洲欧美在线成人| 黑人狂躁日本妞一区二区三区| 欧美激情论坛| 黄色片一区二区三区| 国产一区二区三区黄视频| 国产欧美日韩中文| 性色av一区二区三区四区| 小嫩嫩精品导航| 午夜伦理精品一区| 日本亚洲欧美在线| 亚洲国产激情| 色综合天天狠天天透天天伊人| 精品国产国产综合精品| 日韩精品永久网址| 最近2019好看的中文字幕免费| xxxxx在线观看| 自拍亚洲一区| 亚洲另类激情图| 五月婷婷综合在线观看| 日韩av黄色在线| 国产视频久久久| 女~淫辱の触手3d动漫| 亚洲福利网站| 在线视频欧美日韩| 999久久久国产| 久久久久久久久久久久久久| 久久精品国产免费观看| 精品国产欧美日韩不卡在线观看| 中文无码久久精品| 欧美黑人性生活视频| 麻豆chinese极品少妇| 国产综合欧美| 欧美一级视频一区二区| 五月婷婷六月婷婷| 久久精品国产一区二区三区免费看| 国产乱人伦真实精品视频| 91精品中文字幕| 成人网在线播放| 麻豆一区区三区四区产品精品蜜桃| 日本一卡二卡四卡精品| 国产日韩高清在线| 特级毛片在线免费观看| 新版中文在线官网| 五月天一区二区| 女人另类性混交zo| 视频欧美精品| 亚洲国产成人精品电影| 免费成人深夜天涯网站| 亚洲久久久久| 91超碰caoporn97人人| 中文字幕第315页| 国产精品538一区二区在线| 国产精品二区三区| 国产原创av在线| 悠悠色在线精品| 男人日女人下面视频| 写真福利精品福利在线观看| 欧美一级片在线观看| 中文字幕天堂网| 欧美天天综合| 欧美激情视频网址| 欧美性猛交xxxx乱大交hd| 韩国成人福利片在线播放| 国模精品娜娜一二三区| 日韩黄色影院| 日韩欧美精品免费在线| 欧美又黄又嫩大片a级| 久久精品论坛| 久久九九免费视频| 国产亚洲欧美在线精品| 国产一区二区三区免费在线观看| 蜜桃91精品入口| 日本在线视频www鲁啊鲁| 91久久精品国产91性色tv| 久草福利在线观看| 成人三级视频| 2019精品视频| 国产福利小视频| 中文字幕国产一区二区| 国产肥臀一区二区福利视频| 欧美中文高清| 少妇高潮久久77777| 久久久午夜影院| 国产成人精品三级| 日韩国产一区久久| 色多多在线观看| 日韩久久精品一区| 三上悠亚在线观看视频| 日韩成人精品视频| 鲁丝一区鲁丝二区鲁丝三区| 日韩av官网| 在线播放一区二区三区| xxxxx99| 久久激情网站| 精品国产免费久久久久久尖叫 | 国语自产精品视频在线看一大j8 | 美女精品视频在线| 日韩一区二区欧美| 中国a一片一级一片| 久久在线观看免费| 成年网站在线免费观看| 91免费在线看| 国产日产欧美一区二区视频| 亚洲自拍偷拍一区二区三区| 婷婷综合六月| 日韩成人在线观看| 99热精品免费| 精品一区二区三区免费视频| 少妇免费毛片久久久久久久久 | 精品日产乱码久久久久久仙踪林| 欧美成人久久久| 国产成人精品一区二三区四区五区| 国产精品色眯眯| 欧美伦理片在线观看| 狠狠综合久久av一区二区蜜桃| 热99在线视频| 视频午夜在线| 色婷婷综合久久久中文字幕| 久久久久久久久免费看无码| 国产精品日本| 欧美日韩精品久久| 欧美成人黑人| 亚洲图片在线综合| 亚洲午夜无码久久久久| 欧美国产亚洲另类动漫| 精品日韩久久久| 日本久久精品| 国产欧美中文字幕| www在线观看播放免费视频日本| 制服丝袜亚洲网站| 欧美人妻精品一区二区三区| 丁香六月综合激情| 国产视频九色蝌蚪| 神马久久一区二区三区| 国产精品日韩av| 超碰免费公开在线| 亚洲第一页在线| 日本天堂网在线| 亚洲国产成人私人影院tom| www.色欧美| 亚洲欧美亚洲| 久久久福利视频| 不卡亚洲精品| 精品少妇v888av| 手机在线观看免费av| 亚洲国产综合色| 欧美成人三级伦在线观看| 亚洲一区视频| 亚洲最新在线| 久久丁香四色| 26uuu久久噜噜噜噜| av一区在线观看| 精品免费国产一区二区三区四区| 日韩 国产 在线| 国产精品毛片久久久久久| 女王人厕视频2ⅴk| 亚洲一区观看| 中文字幕av久久| 色综合久久中文| 91精品久久久久久久久久另类 | 欧洲一级黄色片| 久久精品国产99国产| 免费人成自慰网站| 日韩极品一区| 精品日韩欧美| 999精品视频在线观看| 欧美亚洲一区在线| 最新日本在线观看| 国产亚洲精品久久久久久牛牛| 国产美女免费看| 色综合咪咪久久| 久久久久成人网站| 国产精品国产三级国产a | 国产精品午夜春色av| 亚洲欧美激情一区二区三区| 日日夜夜免费精品视频| wwwwww欧美| 91精品国偷自产在线电影 | 国产精品视频一| 麻豆mv在线观看| 欧美黑人xxxⅹ高潮交| 1pondo在线播放免费| 日韩av在线电影网| www.蜜臀av.com| 欧美日韩美女一区二区| 黄色片网站在线免费观看| 有坂深雪av一区二区精品| 大胸美女被爆操| 久久久99久久| 欧美性xxxx图片| 成人丝袜18视频在线观看| 手机av在线网| 青青草伊人久久| 999香蕉视频| 樱桃成人精品视频在线播放| 7777在线视频| 国产精品久久久久久影院8一贰佰| 日产中文字幕在线精品一区 | 亚洲一区二区三区乱码| 久久99国内| 快播日韩欧美| 日韩激情啪啪| 精品综合久久| 97青娱国产盛宴精品视频| 91成人免费视频| 韩国三级成人在线| 91香蕉国产在线观看| 日本成人一区二区| 成人午夜激情网| 久久国产精品免费一区二区三区| 国产日韩欧美电影在线观看| 日韩毛片一区| 国产欧亚日韩视频| 欧美亚洲二区| 国产在线拍偷自揄拍精品| 久久精品xxxxx| 国产视频福利一区| 亚洲精品毛片| 成人黄色免费网站在线观看| 中文幕av一区二区三区佐山爱| 成人黄色影片在线| 日本一区影院| 精品国产综合久久| 色婷婷综合久久久久久| 日韩电影天堂视频一区二区| 欧美综合一区| 自拍偷拍亚洲色图欧美| 亚洲综合小说| 国产精品www在线观看| 亚洲国产专区| 日韩欧美精品在线观看视频| 日韩影院在线观看| 成人性生交免费看| 国产精品88888| 菠萝菠萝蜜网站| 久久亚洲精华国产精华液| 美女被到爽高潮视频| 最好看的中文字幕久久| 久草福利资源在线观看| 欧美日韩中文字幕| 中文字幕人妻互换av久久| 91麻豆精品国产91久久久久久久久| 精品美女www爽爽爽视频| 亚洲第一福利视频| 福利视频在线看| 美女999久久久精品视频| 黄在线观看免费网站ktv| 国产精品久久久久久久久| 9999精品视频| 欧美韩国日本精品一区二区三区| 日本欧美视频| 99在线免费视频观看| 久久黄色影院| 亚洲少妇一区二区| 国产午夜亚洲精品理论片色戒 | 成人夜晚看av| 精品国产一区二区三区成人影院| 日本在线观看不卡| 亚洲一级高清| 亚洲免费999| 91麻豆国产精品久久| 日本成人精品视频| 欧美日韩亚洲精品内裤| 国产男男gay网站| 日韩av网站电影| 四虎影院观看视频在线观看 | 日韩高清一区| 日韩欧美亚洲精品| 亚洲欧洲日本一区二区三区| jizzzz日本| www精品美女久久久tv| 免费在线黄色网| 欧美伊人精品成人久久综合97| 欧美自拍第一页| 久久久999精品视频| 久久青青视频| 久久99精品久久久久久久青青日本 | 一区二区欧美日韩视频| av电影免费在线看| 91在线免费视频| 久久看人人摘| 激情网站五月天| 99久久99久久精品免费观看| 国产盗摄x88av| 555夜色666亚洲国产免| 国产系列在线观看| 啪一啪鲁一鲁2019在线视频| 91精品国产乱码久久久竹菊| 蜜臀在线免费观看| 麻豆成人综合网| 亚洲精品国产精品国自产网站| 欧美日韩在线第一页| 欧美 日韩 国产 成人 在线| 久久91精品国产| 国产午夜精品一区在线观看| 亚洲自拍偷拍二区| 日韩不卡免费视频| 中文字幕免费高清| 色偷偷88欧美精品久久久| 深夜福利免费在线观看| 91成人国产在线观看| 美女一区2区| 人人妻人人添人人爽欧美一区| 丰满放荡岳乱妇91ww| 久久久精品99| 欧美成人video| 黄色的视频在线观看| 国产aⅴ精品一区二区三区黄| 一区二区电影在线观看| 天天综合成人网| 国产精品电影院| 国产农村妇女毛片精品久久| 日韩视频免费中文字幕| 国产精品一区免费在线| 亚洲AV无码成人精品一区| 黄页网站大全一区二区| 少妇aaaaa| 精品福利一二区| 国产v日韩v欧美v| 欧美激情第一页在线观看| 天堂在线亚洲视频| 调教驯服丰满美艳麻麻在线视频 | 欧美一区二区三区免费视| 天天躁日日躁狠狠躁欧美| 国产成人a亚洲精v品无码| 久久精品男人的天堂| 这里只有久久精品视频| 日韩视频第一页| 日韩在线观看一区二区三区| 欧美一级视频在线播放| 97精品国产97久久久久久久久久久久 | 日韩三级电影网| 国产精品久久久久久久久久免费| 色88久久久久高潮综合影院| 午夜福利123| 亚洲v日本v欧美v久久精品| 香蕉av一区二区三区| 国产精品av在线| 亚洲美女视频| 国产精品无码一区二区三| 91久久香蕉国产日韩欧美9色| 日本在线视频站| 国产精品免费一区二区| 久久婷婷麻豆| 日本黄色片免费观看| 亚洲精品999| 欧美黄色成人| 亚洲理论电影在线观看| 国产亚洲欧洲997久久综合| 国产视频一区二区三区四区五区| 国模精品一区二区三区色天香| 精品视频日韩| 91精品国产高清91久久久久久 | 国产精品国产精品国产专区不蜜| 国产福利第一页| 日本精品中文字幕| 中文字幕亚洲精品乱码| 在线不卡av电影| 日韩写真欧美这视频| 视频二区不卡| 久艹在线免费观看| 国产精品久久久久久久第一福利| www.激情五月| 国产精品永久免费观看| 亚洲成人资源| 天天做夜夜爱爱爱|