我後悔在簡歷上寫了“精通”…

衆所周知,簡歷上“瞭解=聽過名字;熟悉=知道是啥;熟練=用過;精通=做過東西”

相信大家對於MySQL的索引都不陌生,索引(Index)是幫助MySQL高效獲取數據的數據結構。索引作爲MySQL中比較重點的知識,在面試中出現的頻率特別高。

本人自認爲對MySQL的索引知識相當瞭解,同事們工作中也都熱情的稱呼我爲大佬。爲了進阿里,我特地花了1個月左右時間複習相關知識,自信滿滿的在簡歷上寫了“精通MySQL”,想不到被阿里面試官狠狠虐了一把…


前半段和麪試官相談甚歡,聊着聊着我提到我們業務量比較大,每天大概有幾百萬的新數據生成。

面試官來了興趣:你們每天這麼大的數據量,都是保存在關係型數據庫中嗎?

我:是的,我們線上使用的是MySQL數據庫。

面試官:那你們有沒有對查詢做一些優化呢?

我:我們用了索引。(由於篇幅問題,接下來的內容我只列出了阿里面試官的問題,自己能答上來的大概只有一半)

你能說說爲什麼B+樹相對於B樹在查詢上會更加優勝嗎?

除了上面這個範圍查詢的,你還能說出其他的一些區別嗎?

剛剛我們聊到B+ Tree,那你知道B+Tree的葉子節點都可以存哪些東西嗎?

聚簇索引和非聚簇索引,在查詢數據的時候有區別嗎?

剛剛你提到主鍵索引查詢只會查一次,而非主鍵索引需要回表查詢多次。是所有情況都是這樣的嗎?非主鍵索引一定會查詢多次嗎?

聯合索引、最左前綴匹配

你們在創建索引的時候都會考慮哪些因素呢?你們有用過聯合索引嗎?

那你們在創建聯合索引的時候,需要做聯合索引多個字段之間順序你們是如何選擇的呢?

索引下推、查詢優化

你知道在MySQL 5.6中,對索引做了哪些優化嗎?

你們創建的那麼多索引,到底有沒有生效,或者說你們的SQL語句有沒有使用索引查詢你們有統計過嗎?

那排查的時候,有什麼手段可以知道有沒有走索引查詢呢?

那什麼情況下會發生明明創建了索引,但是執行的時候並沒有通過索引呢?

哦,索引有關的知識我們暫時就問這麼多吧。你們線上數據的事務隔離級別是什麼呀?

對於程序員來說,去任何一家公司面試,數據庫是避不開的。開發人員對MySQL掌握的越深入,你能做的事情就越多。

完成業務功能,要懂基本的Sql語句。

做性能優化,要懂索引,懂引擎。

做分庫分表,要懂主從,懂讀寫分離。

做安全,要懂權限,懂備份,懂日誌。

做雲數據庫,要懂源碼,懂瓶頸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章