做名片贊機(jī)器人電腦網(wǎng)站是多少整站快速排名
數(shù)據(jù)庫常見問題(持續(xù)更新)
1、數(shù)據(jù)庫范式?
- 1NF:不可分割
- 2NF:沒有非主屬性對候選碼存在部分依賴
- 3NF:沒有非主屬性傳遞依賴候選碼
- BCNF:消除了主屬性對對候選碼的傳遞依賴或部分依賴
2、InnoDB事務(wù)的實(shí)現(xiàn)?
InnoDB 為Mysql數(shù)據(jù)庫的默認(rèn)引擎,InnoDB通過buffer pool,log buffer, redo log, undo log來實(shí)現(xiàn)事務(wù)
以一個update語句為例:
- InnoDB在收到一個update語句后,會先根據(jù)條件找到數(shù)據(jù)所在頁,并將該頁緩存在Buffer Pool中;
- 執(zhí)行update語句,修改Buffer Pool中的數(shù)據(jù),也就是內(nèi)存中的數(shù)據(jù);
- 針對update語句生成一個redo log對象,并存入log buffer中;
- 針對update語句生成undo log日志,用于實(shí)現(xiàn)事務(wù)回滾;
- 如果事務(wù)提交,那么會把redo log對象進(jìn)行持久化,會后將buffer pool中所修改的數(shù)據(jù)頁持久化到磁盤中;
- 如果事務(wù)回滾,利用undo log進(jìn)行回滾;
3、分頁操作如何實(shí)現(xiàn)?
MySQL中使用limit關(guān)鍵字,舉例:
select * from table_name where 條件 limit 當(dāng)前頁碼*頁面容量-1,頁面容量
limit 初始位置,記錄數(shù)
where 字段名 like 表達(dá)式
- %:0或多個任意字符
- _:任意單個字符
- []:其中的任意一個值
4、B樹和B+樹?
B樹的特點(diǎn):
- 節(jié)點(diǎn)排序
- 一個節(jié)點(diǎn)可以存多個元素,這多個元素也是排好序的
B+樹的特點(diǎn):
- 擁有B樹的所有特點(diǎn)
- 葉子之間存在指針
- 非葉子節(jié)點(diǎn)上的元素在葉子節(jié)點(diǎn)上冗余,且葉子節(jié)點(diǎn)排好序的
問題:InnoDB存儲引擎采用B+樹為索引的原因?
- 相比于紅黑樹來說,B+樹層級更少,搜索效率更高。
- 相比于B樹來說,B樹無論是葉子結(jié)點(diǎn)還是非葉子結(jié)點(diǎn)都會保存數(shù)據(jù),這樣會導(dǎo)致一頁存儲的鍵值減少,存儲大量數(shù)據(jù)時只能增加樹的高度,導(dǎo)致性能降低。