MySQL經典面試題

提到MySQL 相信不少人都不陌生,MySQL 做爲目前最流行的關係型數據庫管理系統,在不少的應聘中,都會頻繁被面試官問及。因而就本身總結了一些在面試中,常常面試官被說起的一些問題,但願能帶給更多人幫助。
接下來就跟着個人步伐來了解一下吧!mysql

一、MySQL主從複製的原理。
(1)、主庫必須開啓二進制日誌
(2)、當有增刪改的語句時,會記錄到主庫的binlog中
(3)、主庫經過IO線程把binlog裏面的內容傳給從庫的relay binlog(中繼日誌)(這是msyql複製是異步複製的緣由)
(4)、從庫的sql線程負責讀取它的relay log裏的信息並應用到數據庫中
二、Seconds_Behind_Master的原理。
表示sql線程和io線程之間的時間差
具體的計算:從庫服務器當前的時間戳與二進制日誌中的事件的時間戳相對比獲得的,因此只有在執行事件時才能報告延遲。
不足:
一些錯誤(例如主備的max_allowed_packet不匹配,或者網絡不穩定)可能中斷複製,因爲主從複製是異步操做,Seconds_Behind_Master可能顯示爲0
三、主從延遲的主要緣由有哪些?
(1)、慢SQL語句過多
(2)、從庫的硬件比主庫差
(3)、同一個主庫下有過多的從庫
(4)、網絡延遲
(5)、表分區過多
(還有一些緣由,歡迎補充)
四、MySQL常見存儲引擎及各自特色。
(1)、InnoDB
支持事務、行級鎖、支持外鍵約束,主要面向OLTP的應用,使用next-key locking 的策略來避免幻讀現象的產生.
(2)、MyISAM
不支持事務、表鎖設計、支持全文索引、讀寫互相阻塞、不支持外鍵約束;主要面向OLAP應用場景;緩存池只緩存索引文件,不緩存數據文件
(3)、Memory
將全部數據保存在RAM中,在須要快速查找引用和其餘相似數據的環境下,可提供極快的訪問。若是數據庫重啓或者奔潰,數據都將丟失。
(4)、TokuDB
支持事務、高壓縮、告訴讀寫、基於稀疏樹索引設計;支持大多數在線修改索引、添加字段。
(5)、Inforbright/infinidb
列式存儲、高壓縮、單列查詢快
五、innodb_flush_log_at_trx_commit參數0、1和2分別表明什麼?
innodb_flush_log_at_trx_commit參數能夠控制將redo log buffer中的更新記錄寫入到日誌文件以及日誌文件刷新到磁盤的操做時機。
0
每秒一次觸發log buffer寫入log file中,而且log file刷新到磁盤。
(因爲進程調度問題,不能保證每秒100%刷新;若是mysql進程崩潰,可能會丟失1s的事務;效率最高,但最不安全)
1
每次事務提交觸發log buffer寫入log file中,而且log file刷新到磁盤。
2
每次事務提交,log buffer寫入log file中;每秒log file刷新到磁盤。
(若是操做系統崩潰或者停電,可能會丟失1s的事務)
六、Mysql中varchar和char的區別
CHAR列的長度固定爲建立表時聲明的長度,範圍(0-255)
VARCHAR列的長度不固定,範圍(0-65535)
七、varchar(50)中的50表明的含義、int(20)中20的含義。
varchar(50)中的50表明最多能存放50個字符
int(20)中20的含義表示顯示寬度,跟着zerofill一塊兒纔有意義
八、MySQL binlog的幾種日誌錄入格式的涵義、適用場景和在複製中的優劣。
(1)、statement level模式
每一條會修改數據的sql都會記錄到master的binlog中,slave在複製時sql進程會解析成和原來master端執行過的相同的sql再次執行。
適用場景:對主從數據一致性要求不過高,而且不多用到函數、存儲過程、觸發器等場景
優勢:bin-log日誌量少
缺點:部分新功能(函數、存儲過程、觸發器)同步會有障礙,好比now()
(2)、row level模式
日誌中會記錄成每一行數據被修改的形式,而後再slave端再對相同的數據進行修改
適用場景:對主從數據一致性要求比較高的場景。
優勢:記錄的詳細
缺點:binlog日誌量過大
(3)、mixed模式
MySQL默認採用statement格式進行二進制日誌文件的記錄,可是在一些狀況下會使用row格式,可能的狀況有:
1)、表的存儲引擎爲NDB,此時對錶的DML操做都會以ROW格式記錄
2)、使用了UUID(),USER(),CURRENT_USER(),FOUND_ROWS(),ROW_count()等不肯定函數時
3)、使用了insert delay語句
4)、使用了用戶定義函數(UDF)
5)、使用了臨時表
適用場景:對主從數據一致性要求不過高,可能會用到函數、存儲過程、觸發器等場景
優缺點介於statement和row模式之間
九、重作日誌和二進制日誌的區別(至少三點)
(1)涉及存儲引擎不同:
binlog記錄的是全部存儲引擎的操做記錄
redo log只記錄innodb存儲引擎的日誌
(2)記錄內容不同:
binlog記錄的是關於一個事務的具體操做內容。爲邏輯日誌
而redo log記錄的是每一個頁更改的物理狀況
(3)寫的時間不同:
binlog文件僅在事務提交前進行提交,即只寫磁盤一次
而在事務進行過程當中,卻不斷有重作日誌條目被寫入到重作日誌文件中。
十、Explain執行計劃中要關注哪些要素?
(1)、type:本次查詢表聯接類型,從這裏能夠看到本次查詢大概的效率
(2)、key:最終選擇的索引,若是沒有索引的話,本次查詢效率一般不好
(3)、key_len:本次查詢用於結果過濾的索引實際長度
(4)、rows:預計須要掃描的記錄數,預計須要掃描的記錄數越小越好
(5)、extra:額外附加信息,主要確認是否出現 Using filesort、Using temporary 相似狀況面試

以上就是本次的分享,各位讀者若是有更好的回答,也歡迎交流!
持續關注,還可得到更多幹貨分享及免費資源哦!sql

相關文章
相關標籤/搜索