2020年9月最新MySQL面試整理

1.1. MySQL的binlog(主從復(fù)制機(jī)制)

開(kāi)啟

-- 配置文件中開(kāi)啟

-- 開(kāi)啟binlog

log_bin=ON

-- 指定名稱(chēng)

log_bin_basename=/var/lib/mysql/mysql-bin

-- 索引名稱(chēng)

log_bin_index=/var/lib/mysql/mysql-bin.index

mysql 使用binlog 實(shí)現(xiàn)主從復(fù)制

從庫(kù)中開(kāi)啟線程去主庫(kù)中讀取binlog,然后同步從庫(kù)數(shù)據(jù)(就是執(zhí)行binlog中的sql),從而實(shí)現(xiàn)主從復(fù)制

binlog 三種存儲(chǔ)模式

statement: 保存每個(gè)sql語(yǔ)句到binlog 中,從庫(kù)拿去這些sql去執(zhí)行

row:基于行模式,行更新之后就同步到從庫(kù)

mixed:混合模式,以上兩種方式混合

全部面試題+v:YDT676領(lǐng)取

1.2. InnoDB與MyISAM的區(qū)別

MyISAM的索引與行記錄是分開(kāi)存儲(chǔ)的(非聚集索引)

InnoDB的主鍵索引與行記錄是存儲(chǔ)在一起的(聚集索引)

MyISAM 多用數(shù)據(jù)查詢(xún),不建議做更新、刪除操作

InnoDB支持事務(wù),MyISAM不支持事務(wù)

MyISAM不支持外鍵,InnoDB支持外鍵

1.3. 行鎖表鎖的區(qū)別

鎖定粒度:表鎖 > 行鎖

加鎖效率:表鎖 > 行鎖

沖突概率:表鎖 > 行鎖

并發(fā)性能:表鎖 < 行鎖

1.4. 樂(lè)觀鎖與悲觀鎖

樂(lè)觀鎖是指在操作一條數(shù)據(jù)時(shí),認(rèn)為不會(huì)發(fā)生沖突,不加鎖。在MySQL通常加一個(gè)version字段來(lái)實(shí)現(xiàn)樂(lè)觀鎖,它是一種人為的方式

悲觀鎖是指沒(méi)次操作總?cè)蝿?wù)會(huì)發(fā)生沖突,每一次操作都會(huì)先獲取鎖,MYSQL中S鎖和X鎖就是悲觀鎖的一種形式

1.5. 隔離級(jí)別是什么,有什么作用

在事務(wù)并發(fā)情況下,各個(gè)事務(wù)之間會(huì)出現(xiàn)幻讀(數(shù)據(jù)讀取條數(shù)不一致——>范圍查找),可重復(fù)讀(事務(wù)內(nèi)兩次讀取的數(shù)據(jù)不一致),臟讀(讀到事務(wù)未提交的數(shù)據(jù))

1.6. 什么情況下不會(huì)使用索引

在索引字段上計(jì)算、函數(shù)、(自動(dòng)or手動(dòng))類(lèi)型轉(zhuǎn)換,會(huì)導(dǎo)致全表掃描,而不會(huì)使用索引

SELECT*FROMstaffsWHERELEFT(NAME,2)='lee'

使用(!=或者<>、is null,is not null )時(shí)也是用不到索引

like以通配符開(kāi)頭('%James')mysql索引失效會(huì)變成全表掃描操作

字符串不加單引號(hào)索引失效(出現(xiàn)隱式類(lèi)型裝換到時(shí)索引失效)

SELECT*FROMstaffsWHEREname=2000

少用or,用它連接時(shí)會(huì)索引失效

1.7. 創(chuàng)建檢索的基本原則是什么

頻繁作為查詢(xún)的條件的字段應(yīng)該創(chuàng)建索引

頻繁更新的字段不適合創(chuàng)建索引:因?yàn)槊看胃虏粏螁问歉铝擞涗涍€會(huì)更新索引,加重IO負(fù)擔(dān)

Where條件里用不到的字段不創(chuàng)建索引

查詢(xún)中排序的字段,排序字段若通過(guò)索引去訪問(wèn)將大大提高排序的速度

查詢(xún)中統(tǒng)計(jì)或者分組的字段

經(jīng)常增刪改的表不適合建立索引

離散性比較低的列不適合做索引(count(distinct col):count(col)的比例)

1.8. 查詢(xún)優(yōu)化技巧

全值匹配我最?lèi)?ài),最左前綴要遵守;

帶頭大哥不能死,中間兄弟不能斷;

索引列上少計(jì)算,范圍之后全失效;

LIKE百分寫(xiě)最右,覆蓋索引不寫(xiě)*;

不等空值還有OR,索引失效要掃用;

VAR引號(hào)不能丟,SQL高級(jí)也不難;

1.9. B+索引數(shù)據(jù)結(jié)構(gòu),和B樹(shù)的區(qū)別

B樹(shù)

每個(gè)節(jié)點(diǎn)都存儲(chǔ)key和data,所有節(jié)點(diǎn)組成這棵樹(shù),并且葉子節(jié)點(diǎn)指針為null

遵守二叉樹(shù)的基本準(zhǔn)則,每次插入數(shù)據(jù)或則刪除數(shù)據(jù)都會(huì)計(jì)算保持一個(gè)平衡(旋轉(zhuǎn))

B+Tree(B樹(shù)加強(qiáng)版)

節(jié)點(diǎn)關(guān)鍵字搜索采用閉合區(qū)間

非葉節(jié)點(diǎn)不保存數(shù)據(jù)相關(guān)信息,只保存關(guān)鍵字和子節(jié)點(diǎn)的引用

關(guān)鍵字對(duì)應(yīng)的數(shù)據(jù)保存在葉子節(jié)點(diǎn)中

葉子節(jié)點(diǎn)是順序排列的,并且相鄰節(jié)點(diǎn)具有順序引用的關(guān)系

這種方式的好處就是快,性能更好

1.10. 事務(wù)四大特性(ACID)

原子性(Atomicity)

最小的工作單元,整個(gè)工作單元要么一起提交成功,要么全部失敗回滾

一致性(Consistency)

事務(wù)中操作的數(shù)據(jù)及狀態(tài)改變是一致的,即寫(xiě)入資料的結(jié)果必須完全符合預(yù)設(shè)的規(guī)則, 不會(huì)因?yàn)槌霈F(xiàn)系統(tǒng)意外等原因?qū)е聽(tīng)顟B(tài)的不一致

隔離性(Isolation)

一個(gè)事務(wù)所操作的數(shù)據(jù)在提交之前,對(duì)其他事務(wù)的可見(jiàn)性設(shè)定(一般設(shè)定為不可見(jiàn))

持久性(Durability)

事務(wù)所做的修改就會(huì)永久保存,不會(huì)因?yàn)橄到y(tǒng)意外導(dǎo)致數(shù)據(jù)的丟失

1.11. MVCC機(jī)制

Multiversion concurrency control (多版本并發(fā)控)

并發(fā)訪問(wèn)(讀或?qū)?數(shù)據(jù)庫(kù)時(shí),對(duì)正在事務(wù)內(nèi)處理的數(shù)據(jù)做多版本的管理。以達(dá)到用來(lái)避免寫(xiě)操作的堵塞,從而引發(fā)讀操作的并發(fā)問(wèn)題。

解決了InnoDB的幻讀問(wèn)題(RR隔離級(jí)別)

全部面試題+v:YDT676領(lǐng)取

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

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