MySQL經典面試題


提到MySQL 相信很多人都不陌生,MySQL 作為目前最流行的關系型數據庫管理系統,在很多的應聘中,都會頻繁被面試官問及。於是就自己總結了一些在面試中,經常面試官被提及的一些問題,希望能帶給更多人幫助。 接下來就跟着我的步伐來了解一下吧!

1、MySQL主從復制的原理。

(1)、主庫必須開啟二進制日志

(2)、當有增刪改的語句時,會記錄到主庫的binlog中

(3)、主庫通過IO線程把binlog里面的內容傳給從庫的relay binlog(中繼日志)(這是msyql復制是異步復制的原因)

(4)、從庫的sql線程負責讀取它的relay log里的信息並應用到數據庫中 2、Seconds_Behind_Master的原理。

表示sql線程和io線程之間的時間差 具體的計算:從庫服務器當前的時間戳與二進制日志中的事件的時間戳相對比得到的,所以只有在執行事件時才能報告延遲。 不足: 一些錯誤(例如主備的max_allowed_packet不匹配,或者網絡不穩定)可能中斷復制,由於主從復制是異步操作,Seconds_Behind_Master可能顯示為0 3、主從延遲的主要原因有哪些?

(1)、慢SQL語句過多

(2)、從庫的硬件比主庫差

(3)、同一個主庫下有過多的從庫

(4)、網絡延遲

(5)、表分區過多 (還有一些原因,歡迎補充)

4、MySQL常見存儲引擎及各自特點。

(1)、InnoDB 支持事務、行級鎖、支持外鍵約束,主要面向OLTP的應用,使用next-key locking 的策略來避免幻讀現象的產生. (2)、MyISAM 不支持事務、表鎖設計、支持全文索引、讀寫互相阻塞、不支持外鍵約束;主要面向OLAP應用場景;緩存池只緩存索引文件,不緩存數據文件 (3)、Memory 將所有數據保存在RAM中,在需要快速查找引用和其他類似數據的環境下,可提供極快的訪問。如果數據庫重啟或者奔潰,數據都將丟失。 (4)、TokuDB 支持事務、高壓縮、告訴讀寫、基於稀疏樹索引設計;支持大多數在線修改索引、添加字段。 (5)、Inforbright/infinidb 列式存儲、高壓縮、單列查詢快 5、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的事務) 6、Mysql中varchar和char的區別 CHAR列的長度固定為創建表時聲明的長度,范圍(0-255) VARCHAR列的長度不固定,范圍(0-65535) 7、varchar(50)中的50代表的含義、int(20)中20的含義。 varchar(50)中的50代表最多能存放50個字符 int(20)中20的含義表示顯示寬度,跟着zerofill一起才有意義 8、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模式之間 9、重做日志和二進制日志的區別(至少三點) (1)涉及存儲引擎不一樣: binlog記錄的是所有存儲引擎的操作記錄 redo log只記錄innodb存儲引擎的日志 (2)記錄內容不一樣: binlog記錄的是關於一個事務的具體操作內容。為邏輯日志 而redo log記錄的是每個頁更改的物理情況 (3)寫的時間不一樣: binlog文件僅在事務提交前進行提交,即只寫磁盤一次 而在事務進行過程中,卻不斷有重做日志條目被寫入到重做日志文件中。 10、Explain執行計划中要關注哪些要素?

(1)、type:本次查詢表聯接類型,從這里可以看到本次查詢大概的效率

(2)、key:最終選擇的索引,如果沒有索引的話,本次查詢效率通常很差

(3)、key_len:本次查詢用於結果過濾的索引實際長度

(4)、rows:預計需要掃描的記錄數,預計需要掃描的記錄數越小越好

(5)、extra:額外附加信息,主要確認是否出現 Using filesort、Using temporary 類似情況

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM