mysql面试吗hi提_面试必备的10道MySQL题
MySQL 事務,是我們去面試中高級開發經常會被問到的問題,很多人雖然經常使用 MySQL,SQL 語句也寫得很溜,但是面試的時候,被問到這些問題,總是不知從何說起。下面我們先來了解一下什么是 MySQL事務,再給大家分享10道面試必備的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 類似情況
以上10道MySQL面試題,只是眾多MySQL面試題中的部分,個人認為是比較典型的,出現頻率也比較高的試題,希望對你們有幫助!
總結
以上是生活随笔為你收集整理的mysql面试吗hi提_面试必备的10道MySQL题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序的装入和链接
- 下一篇: bash mysql 循环输出_Bash