最新最全的MySQL面試整理

2022-08-10 02:27:17 字數 2857 閱讀 3191

掃一掃獲取全部面試題

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:ydt939領取

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:ydt939領取

最新最全的MySQL面試整理

掃一掃獲取全部面試題 1.1.mysql的binlog 主從複製機制 開啟 配置檔案中開啟 開啟binlog log bin on 指定名稱 log bin basename var lib mysql mysql bin 索引名稱 log bin index var lib mysql mysql...

2020最新最全Python面試題整理(五)

1 描述一下scrapy框架的執行機制?2 寫爬蟲使用多程序好,還是用多執行緒好?3 常見的反爬蟲和應對方法?基於使用者行為,同乙個ip段時間多次訪問同一頁面 利用 ip,構建ip池 請求頭里的user agent 構建user agent池 作業系統 瀏覽器不同,模擬不同使用者 動態載入 抓到的資...

2020最新最全Python面試題整理(七)

1 打亂乙個排好序的list物件alist?import random alist 1 2,3 4,5 random.shuffle alist print alist 2 現有字典 d 請按value值進行排序?sorted d.items key lambda x x 1 3 字典推導式 d 4...