吊打面試官!MySQL靈魂100問,你能答出多少?
推薦閱讀:
前言
本文主要受眾為開發人員,所以不涉及到MySQL的服務部署等操作,且內容較多,大家準備好耐心和瓜子礦泉水.
前一陣系統的學習了一下MySQL,也有一些實際操作經驗,偶然看到一篇和MySQL相關的面試文章,發現其中的一些問題自己也回答不好,雖然知識點大部分都知道,但是無法將知識串聯起來.
因此決定搞一個MySQL靈魂100問,試著用回答問題的方式,讓自己對知識點的理解更加深入一點.
此文不會事無鉅細的從select的用法開始講解mysql,主要針對的是開發人員需要知道的一些MySQL的知識點,主要包括索引,事務,優化等方面,以在面試中高頻的問句形式給出答案.
索引相關
關於MySQL的索引,曾經進行過一次總結,文章連結在這裡 Mysql索引原理及其優化.
1. 什麼是索引?
索引是一種資料結構,可以幫助我們快速的進行資料的查詢.
2. 索引是個什麼樣的資料結構呢?
索引的資料結構和具體儲存引擎的實現有關, 在MySQL中使用較多的索引有Hash索引,B+樹索引等,而我們經常使用的InnoDB儲存引擎的預設索引實現為:B+樹索引.
3. Hash索引和B+樹所有有什麼區別或者說優劣呢?
首先要知道Hash索引和B+樹索引的底層實現原理:
hash索引底層就是hash表,進行查詢時,呼叫一次hash函式就可以獲取到相應的鍵值,之後進行回表查詢獲得實際資料.B+樹底層實現是多路平衡查詢樹.對於每一次的查詢都是從根節點出發,查詢到葉子節點方可以獲得所查鍵值,然後根據查詢判斷是否需要回表查詢資料.
那麼可以看出他們有以下的不同:
- hash索引進行等值查詢更快(一般情況下),但是卻無法進行範圍查詢.
因為在hash索引中經過hash函式建立索引之後,索引的順序與原順序無法保持一致,不能支援範圍查詢.而B+樹的的所有節點皆遵循(左節點小於父節點,右節點大於父節點,多叉樹也類似),天然支援範圍.
-
hash索引不支援使用索引進行排序,原理同上.
-
hash索引不支援模糊查詢以及多列索引的最左字首匹配.原理也是因為hash函式的不可預測. AAAA和 AAAAB的索引沒有相關性.
-
hash索引任何時候都避免不了回表查詢資料,而B+樹在符合某些條件(聚簇索引,覆蓋索引等)的時候可以只通過索引完成查詢.
-
hash索引雖然在等值查詢上較快,但是不穩定.效能不可預測,當某個鍵值存在大量重複的時候,發生hash碰撞,此時效率可能極差.而B+樹的查詢效率比較穩定,對於所有的查詢都是從根節點到葉子節點,且樹的高度較低.
因此,在大多數情況下,直接選擇B+樹索引可以獲得穩定且較好的查詢速度.而不需要使用hash索引.
4. 上面提到了B+樹在滿足聚簇索引和覆蓋索引的時候不需要回表查詢資料,什麼是聚簇索引?
5. 非聚簇索引一定會回表查詢嗎?
6. 在建立索引的時候,都有哪些需要考慮的因素呢?
7. 聯合索引是什麼?為什麼需要注意聯合索引中的順序?
8. 建立的索引有沒有被使用到?或者說怎麼才可以知道這條語句執行很慢的原因?
9. 那麼在哪些情況下會發生針對該列建立了索引但是在查詢的時候並沒有使用呢?
事務相關
1. 什麼是事務?
理解什麼是事務最經典的就是轉賬的栗子,相信大家也都瞭解,這裡就不再說一邊了.
事務是一系列的操作,他們要符合ACID特性.最常見的理解就是:事務中的操作要麼全部成功,要麼全部失敗.但是隻是這樣還不夠的.
2. ACID是什麼?可以詳細說一下嗎?
A=Atomicity
原子性,就是上面說的,要麼全部成功,要麼全部失敗.不可能只執行一部分操作.
C=Consistency
系統(資料庫)總是從一個一致性的狀態轉移到另一個一致性的狀態,不會存在中間狀態.
I=Isolation
隔離性: 通常來說:一個事務在完全提交之前,對其他事務是不可見的.注意前面的通常來說加了紅色,意味著有例外情況.
D=Durability
永續性,一旦事務提交,那麼就永遠是這樣子了,哪怕系統崩潰也不會影響到這個事務的結果.
3. 同時有多個事務在進行會怎麼樣呢?
多事務的併發進行一般會造成以下幾個問題:
-
髒讀: A事務讀取到了B事務未提交的內容,而B事務後面進行了回滾.
-
不可重複讀: 當設定A事務只能讀取B事務已經提交的部分,會造成在A事務內的兩次查詢,結果竟然不一樣,因為在此期間B事務進行了提交操作.
-
幻讀: A事務讀取了一個範圍的內容,而同時B事務在此期間插入了一條資料.造成”幻覺”.
4. 怎麼解決這些問題呢?MySQL的事務隔離級別瞭解嗎?
5. Innodb使用的是哪種隔離級別呢?
6. 對MySQL的鎖瞭解嗎?
7. MySQL都有哪些鎖呢?像上面那樣子進行鎖定豈不是有點阻礙併發效率了?
表結構設計
1. 為什麼要儘量設定一個主鍵?
2. 主鍵使用自增ID還是UUID?
3. 欄位為什麼要求定義為not null?
4. 如果要儲存使用者的密碼雜湊,應該使用什麼欄位進行儲存?
密碼雜湊,鹽,使用者身份證號等固定長度的字串應該使用char而不是varchar來儲存,這樣可以節省空間且提高檢索效率.
儲存引擎相關
1. MySQL支援哪些儲存引擎?
MySQL支援多種儲存引擎,比如InnoDB,MyISAM,Memory,Archive等等.在大多數的情況下,直接選擇使用InnoDB引擎都是最合適的,InnoDB也是MySQL的預設儲存引擎.
InnoDB和MyISAM有什麼區別?
-
InnoDB支援事物,而MyISAM不支援事物
-
InnoDB支援行級鎖,而MyISAM支援表級鎖
-
InnoDB支援MVCC, 而MyISAM不支援
-
InnoDB支援外來鍵,而MyISAM不支援
-
InnoDB不支援全文索引,而MyISAM支援。
零散問題
1. MySQL中的varchar和char有什麼區別.
2. varchar(10)和int(10)代表什麼含義?
3. MySQL的binlog有有幾種錄入格式?分別有什麼區別?
4. 超大分頁怎麼處理?
5. 關心過業務系統裡面的sql耗時嗎?統計過慢查詢嗎?對慢查詢都怎麼優化過?
6. 上面提到橫向分表和縱向分表,可以分別舉一個適合他們的例子嗎?
7. 什麼是儲存過程?有哪些優缺點?
8. 說一說三個正規化
9. MyBatis中的#
由於篇幅原因,在這就不做全部展示了,這些題我已經整理成pdf文件免費分享給那些有需要的朋友,同時整理也花費了蠻多時間,有需要的朋友可以點選免費 領取
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946007/viewspace-2656580/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android JVM面試專題:阿里100%會問到的JVM,20道靈魂質問面試題解析,讓你吊打面試官AndroidJVM阿里面試題
- 30道Web前端面試題,你能答出多少道?Web前端面試題
- MySQL靈魂拷問:36題帶你面試通關MySql面試
- BATJ面試redis靈魂36問,你這麼回答,面試官一定對你刮目相看BAT面試Redis
- 大廠resdis靈魂40問,教你如何搞定面試官面試
- Java開發面試題大彙總,年薪30萬的面試題你能答出多少?Java面試題
- 吊打面試官——redis面試Redis
- MySQL高頻面試題的靈魂拷問MySql面試題
- [靈魂拷問]MySQL面試高頻一百問(工程師方向)MySql面試工程師
- Java 面試-吊打面試官系列 Redis 基礎Java面試Redis
- 面試官:十問泛型,你能扛住嗎?面試泛型
- 40道阿里巴巴JAVA研發崗多執行緒面試題詳解,你能答出多少阿里Java執行緒面試題
- 2019年一線大廠最全JVM面試100問!你能答對多少?JVM面試
- 面試官問:你有多少種方式實現三欄佈局?面試
- 面試官:說說你之前負責的系統,QPS 能達到多少?面試
- 靈魂拷問,你真的瞭解DNS嗎?DNS
- 征服面試官:OkHttp 原理篇 掌握這篇面試題彙總,吊打面試官!HTTP面試題
- RabbitMQ靈魂拷問MQ
- 面試時,你會問面試官哪些問題?面試
- 面試官:你能回答這兩個簡單的問題嗎面試
- 《吊打面試官》系列-秒殺系統設計面試
- 吊打面試官!從多維度理解架構面試架構
- 吊打面試官!業務架構的關鍵概念面試架構
- 面試官問我MySQL索引,我面試MySql索引
- 【Java】面試官靈魂拷問:if語句執行完else語句真的不會再執行嗎?Java面試
- 上位機面試必備——TCP通訊靈魂二十問【下】面試TCP
- 吊打面試官!應用間互動如何設計?面試
- 面試官:MySQL 中 varchar(n) 中 n 最大取值為多少?面試MySql
- 面試中HashMap連結串列成環的問題你答出了嗎面試HashMap
- 面試官:我們來聊一聊Redis吧,你瞭解多少就答多少面試Redis
- 軟體測試人員面試會遇到哪些靈魂提問?面試
- 軟體測試員,面試逃不過的靈魂三問…面試
- Google面試官Gayle McDowell:找一家能讓你開心的公司(圖靈訪談)Go面試圖靈
- 動畫:《大前端吊打面試官系列》 之原生 JavaScript 精華篇動畫前端面試JavaScript
- 面試必問之 CopyOnWriteArrayList,你瞭解多少?面試
- AQS很難,面試不會?看我一篇文章吊打面試官AQS面試
- 面試官靈魂三問:什麼是SOA?什麼是微服務?SOA和微服務有什麼區別?面試微服務
- 一道面試題牽出12個前端硬核知識點,你能答出幾個?面試題前端