1. 程式人生 > 實用技巧 >整理了一些最近的MySQL面試題

整理了一些最近的MySQL面試題

掃一掃免費獲取全部面試題

1.1. MySQL的binlog(主從複製機制)

開啟

-- 配置檔案中開啟

-- 開啟binlog

log_bin=ON

-- 指定名稱

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

-- 索引名稱

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

mysql 使用binlog 實現主從複製

從庫中開啟執行緒去主庫中讀取binlog,然後同步從庫資料(就是執行binlog中的sql),從而實現主從複製

binlog 三種儲存模式

statement: 儲存每個sql語句到binlog 中,從庫拿去這些sql去執行

row:基於行模式,行更新之後就同步到從庫

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

全部面試題+v:YDT929領取

1.2. InnoDB與MyISAM的區別

MyISAM的索引與行記錄是分開儲存的(非聚集索引)

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

MyISAM 多用資料查詢,不建議做更新、刪除操作

InnoDB支援事務,MyISAM不支援事務

MyISAM不支援外來鍵,InnoDB支援外來鍵

1.3. 行鎖表鎖的區別

鎖定粒度:表鎖 > 行鎖

加鎖效率:表鎖 > 行鎖

衝突概率:表鎖 > 行鎖

併發效能:表鎖 < 行鎖

1.4. 樂觀鎖與悲觀鎖

樂觀鎖是指在操作一條資料時,認為不會發生衝突,不加鎖。在MySQL通常加一個version欄位來實現樂觀鎖,它是一種人為的方式

悲觀鎖是指沒次操作總任務會發生衝突,每一次操作都會先獲取鎖,MYSQL中S鎖和X鎖就是悲觀鎖的一種形式

1.5. 隔離級別是什麼,有什麼作用

在事務併發情況下,各個事務之間會出現幻讀(資料讀取條數不一致——>範圍查詢),可重複讀(事務內兩次讀取的資料不一致),髒讀(讀到事務未提交的資料)

1.6. 什麼情況下不會使用索引

在索引欄位上計算、函式、(自動or手動)型別轉換,會導致全表掃描,而不會使用索引

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

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

like以萬用字元開頭('%James')mysql索引失效會變成全表掃描操作

字串不加單引號索引失效(出現隱式型別裝換到時索引失效)

SELECT*FROMstaffsWHEREname=2000

少用or,用它連線時會索引失效

1.7. 建立檢索的基本原則是什麼

頻繁作為查詢的條件的欄位應該建立索引

頻繁更新的欄位不適合建立索引:因為每次更新不單單是更新了記錄還會更新索引,加重IO負擔

Where條件裡用不到的欄位不建立索引

查詢中排序的欄位,排序欄位若通過索引去訪問將大大提高排序的速度

查詢中統計或者分組的欄位

經常增刪改的表不適合建立索引

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

1.8. 查詢優化技巧

全值匹配我最愛,最左字首要遵守;

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

索引列上少計算,範圍之後全失效;

LIKE百分寫最右,覆蓋索引不寫*;

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

VAR引號不能丟,SQL高階也不難;

1.9. B+索引資料結構,和B樹的區別

B樹

每個節點都儲存key和data,所有節點組成這棵樹,並且葉子節點指標為null

遵守二叉樹的基本準則,每次插入資料或則刪除資料都會計算保持一個平衡(旋轉)

B+Tree(B樹加強版)

節點關鍵字搜尋採用閉合區間

非葉節點不儲存資料相關資訊,只儲存關鍵字和子節點的引用

關鍵字對應的資料儲存在葉子節點中

葉子節點是順序排列的,並且相鄰節點具有順序引用的關係

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

1.10. 事務四大特性(ACID)

原子性(Atomicity)

最小的工作單元,整個工作單元要麼一起提交成功,要麼全部失敗回滾

一致性(Consistency)

事務中操作的資料及狀態改變是一致的,即寫入資料的結果必須完全符合預設的規則, 不會因為出現系統意外等原因導致狀態的不一致

隔離性(Isolation)

一個事務所操作的資料在提交之前,對其他事務的可見性設定(一般設定為不可見)

永續性(Durability)

事務所做的修改就會永久儲存,不會因為系統意外導致資料的丟失

1.11. MVCC機制

Multiversion concurrency control (多版本併發控)

併發訪問(讀或寫)資料庫時,對正在事務內處理的資料做多版本的管理。以達到用來避免寫操作的堵塞,從而引發讀操作的併發問題。

解決了InnoDB的幻讀問題(RR隔離級別)

全部面試題+v:YDT929領取