MySQL高頻面試題的靈魂拷問

唯一索引比普通索引快嗎, 為什麼?

唯一索引不一定比普通索引快, 還可能慢.

  1. 查詢時, 在未使用limit 1的情況下, 在匹配到一條數據後, 唯一索引即返回, 普通索引會繼續匹配下一條數據, 發現不匹配後返回. 如此看來唯一索引少了一次匹配, 但實際上這個消耗微乎其微.
  2. 更新時, 這個情況就比較複雜了. 普通索引將記錄放到change buffer中語句就執行完畢了. 而對唯一索引而言, 它必須要校驗唯一性, 因此, 必須將數據頁讀入內存確定沒有衝突, 然後才能繼續操作. 對於寫多讀少的情況, 普通索引利用change buffer有效減少了對磁盤的訪問次數, 因此普通索引性能要高於唯一索引.

MySQL由哪些部分組成, 分別用來做什麼

  1. Server
  2. 連接器: 管理連接, 權限驗證.
  3. 分析器: 詞法分析, 語法分析.
  4. 優化器: 執行計劃生成, 索引的選擇.
  5. 執行器: 操作存儲引擎, 返回執行結果.
  6. 存儲引擎: 存儲數據, 提供讀寫接口.

MySQL查詢緩存有什麼弊端, 應該什麼情況下使用, 8.0版本對查詢緩存有什麼變更.

  • 查詢緩存可能會失效非常頻繁, 對於一個表, 只要有更新, 該表的全部查詢緩存都會被清空. 因此對於頻繁更新的表來說, 查詢緩存不一定能起到正面效果.
  • 對於讀遠多於寫的表可以考慮使用查詢緩存.
  • 8.0版本的查詢緩存功能被刪了 ( ̄. ̄).

MyISAM和InnoDB的區別有哪些

  • InnoDB支持事務, MyISAM不支持.
  • InnoDB支持行級鎖, MyISAM支持表級鎖.
  • InnoDB支持多版本併發控制(MVVC), MyISAM不支持.
  • InnoDB支持外鍵, MyISAM不支持.
  • MyISAM支持全文索引, InnoDB不支持(但可以使用Sphinx插件)

MySQL怎麼恢復半個月前的數據

通過整庫備份+binlog進行恢復. 前提是要有定期整庫備份且保存了binlog日誌.

MySQL事務的隔離級別, 分別有什麼特點

  1. 讀未提交(RU): 一個事務還沒提交時, 它做的變更就能被別的事務看到.
  2. 讀提交(RC): 一個事務提交之後, 它做的變更才會被其他事務看到.
  3. 可重複讀(RR): 一個事務執行過程中看到的數據, 總是跟這個事務在啟動時看到的數據是一致的. 當然在可重複讀隔離級別下, 未提交變更對其他事務也是不可見的.
  4. 串行化(S): 對於同一行記錄, 讀寫都會加鎖. 當出現讀寫鎖衝突的時候, 後訪問的事務必須等前一個事務執行完成才能繼續執行.

做過哪些MySQL索引相關優化

  • 儘量使用主鍵查詢: 聚簇索引上存儲了全部數據, 相比普通索引查詢, 減少了回表的消耗.
  • MySQL5.6之後引入了索引下推優化, 通過適當的使用聯合索引, 減少回表判斷的消耗.
  • 若頻繁查詢某一列數據, 可以考慮利用覆蓋索引避免回表.
  • 聯合索引將高頻字段放在最左邊.

簡要說一下數據庫範式

  • 第一範式: 屬性不可再分.
  • 第二範式: 在一範式的基礎上, 要求數據庫表中的每個實例或行必須可以被惟一地區分. 通常需要為表加上一個列, 以存儲各個實例的惟一標識. 這個惟一屬性列被稱為主關鍵字或主鍵.
  • 第三範式: 在二範式的基礎上, 要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息. 所以第三範式具有如下特徵:1). 每一列只有一個值. 2). 每一行都能區分. 3). 每一個表都不包含其他表已經包含的非主關鍵字信息.

一千萬條數據的表, 如何分頁查詢

數據量過大的情況下, limit offset分頁會由於掃描數據太多而越往後查詢越慢. 可以配合當前頁最後一條ID進行查詢, SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT}. 當然, 這種情況下ID必須是有序的, 這也是有序ID的好處之一.

訂單表數據量越來越大導致查詢緩慢, 如何處理

分庫分表. 由於歷史訂單使用率並不高, 高頻的可能只是近期訂單, 因此, 將訂單表按照時間進行拆分, 根據數據量的大小考慮按月分表或按年分表. 訂單ID最好包含時間(如根據雪花算法生成), 此時既能根據訂單ID直接獲取到訂單記錄, 也能按照時間進行查詢。


文末福利:為了讓學習變得輕鬆、高效,今天給大家免費分享一套阿里架構師傳授的一套教學資源。幫助大家在成為架構師的道路上披荊斬棘。

這套視頻課程詳細講解了(Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構)等這些成為架構師必備的內容!

MySQL高頻面試題的靈魂拷問

而且還把框架需要用到的各種程序進行了打包,根據基礎視頻可以讓你輕鬆搭建分佈式框架環境,像在企業生產環境一樣進行學習和實踐。

領取方式:關注作者,私信關鍵詞 (資料)即可!


領取方式:關注作者,私信關鍵詞 (資料)即可!


領取方式:關注作者,私信關鍵詞 (資料)即可!


分享到:


相關文章: