MySQL 8.0 特性的高頻面試題及核心知識(shí)點(diǎn)

1. 索引原理與 MySQL 8.0 新特性

  • 答案

    • 自適應(yīng)哈希索引:MySQL 8.0 自動(dòng)在頻繁查詢的索引上構(gòu)建哈希索引,加速等值查詢(如 WHERE id=1)。
    • 全文索引優(yōu)化:支持布爾模式(MATCH() AGAINST())和自然語言模式,且索引更新更高效。
    • InnoDB 頁壓縮:支持 ZSTD 壓縮算法,減少存儲(chǔ)空間和 I/O 開銷。
    • 虛擬列索引:可對(duì)虛擬列(Computed Columns)創(chuàng)建索引,減少存儲(chǔ)冗余。

2. 事務(wù)隔離級(jí)別與 MySQL 8.0 的新特性

  • 答案

    • 默認(rèn)隔離級(jí)別:MySQL 8.0 仍默認(rèn) Repeatable Read,但引入了 READ COMMITTED 的優(yōu)化(如 Next-Key Lock 的改進(jìn))。
    • 鎖機(jī)制增強(qiáng):支持 SKIP LOCKEDNOWAIT,在 SELECT ... FOR UPDATE 中快速跳過鎖定的行或直接報(bào)錯(cuò)。
    • 分布式事務(wù):結(jié)合 Group Replication,支持多節(jié)點(diǎn)事務(wù)一致性。

3. InnoDB 新特性

  • 答案

    • 動(dòng)態(tài)數(shù)據(jù)字典:MySQL 8.0 的系統(tǒng)表存儲(chǔ)在 InnoDB 中,支持在線 DDL(如 ALTER TABLE)。
    • 并行查詢innodb_parallel_read_threads 優(yōu)化多核 CPU 的利用,提升大表查詢性能。
    • 在線分區(qū)操作:支持 ALTER TABLE ... REORGANIZE PARTITION 在線操作,減少鎖時(shí)間。

4. JSON 類型與函數(shù)

  • 答案

    • JSON 支持增強(qiáng)

      • 新增函數(shù):JSON_TABLE(將 JSON 轉(zhuǎn)為關(guān)系表)、JSON_VALUE、JSON_ARRAYAGG
      • 支持路徑表達(dá)式:如 $.store.book[0].title。
    • 查詢優(yōu)化:JSON 索引支持 FUNCTIONAL 索引,加速 JSON 路徑查詢。


5. 窗口函數(shù)(Window Functions)

  • 答案

    • 新增功能:MySQL 8.0 引入窗口函數(shù),如 ROW_NUMBER(), RANK(), SUM() OVER (...),無需自連接即可實(shí)現(xiàn)復(fù)雜計(jì)算。

    • 使用場(chǎng)景:排名、滑動(dòng)聚合、分組內(nèi)排序。

    • 示例

      SELECT 
          id, 
          sales, 
          ROW_NUMBER() OVER (PARTITION BY region ORDER BY sales DESC) AS rank 
      FROM sales_data;
      

6. CTE(公用表表達(dá)式)

  • 答案

    • 新增語法:支持 WITH 子句,簡化復(fù)雜查詢(如遞歸查詢)。

    • 示例:實(shí)現(xiàn)樹形結(jié)構(gòu)查詢:

      WITH RECURSIVE category_tree AS (
          SELECT * FROM categories WHERE parent_id IS NULL
          UNION ALL
          SELECT c.* FROM categories c 
          INNER JOIN category_tree ct ON c.parent_id = ct.id
      )
      SELECT * FROM category_tree;
      

7. 默認(rèn)認(rèn)證插件

  • 答案

    • 變化點(diǎn):MySQL 8.0 默認(rèn)認(rèn)證插件從 mysql_native_password 改為 caching_sha2_password,需注意客戶端兼容性。

    • 解決方法:若連接報(bào)錯(cuò),可臨時(shí)改回舊插件:

      ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
      

8. 臨時(shí)表優(yōu)化

  • 答案

    • 內(nèi)存臨時(shí)表:MySQL 8.0 默認(rèn)允許在內(nèi)存中創(chuàng)建臨時(shí)表(tmp_table_size 控制),提升性能。
    • 哈希臨時(shí)表:對(duì) GROUP BYDISTINCT 查詢優(yōu)化,減少磁盤 I/O。

9. 分區(qū)表增強(qiáng)

  • 答案

    • 分區(qū)類型擴(kuò)展:支持 LINEAR KEYLINEAR HASH 分區(qū),分布更均勻。
    • 子分區(qū):允許對(duì)分區(qū)進(jìn)一步子分區(qū)(如 RANGE 分區(qū) + HASH 子分區(qū))。
    • 分區(qū)修剪優(yōu)化:查詢時(shí)自動(dòng)跳過無關(guān)分區(qū),加速范圍查詢。

10. 原子 DDL(Online DDL)

  • 答案

    • 在線操作:大多數(shù) ALTER TABLE 操作(如 ADD COLUMN, DROP INDEX)支持在線執(zhí)行,無需鎖表。
    • 新特性REORGANIZE PARTITIONREBUILD PARTITION 支持在線分區(qū)重組。
    • 工具pt-online-schema-change 與 MySQL 8.0 兼容性更好。

11. 性能監(jiān)控與優(yōu)化

  • 答案

    • Performance Schema:新增 memory_summary_by_host_by_event_name 等表,監(jiān)控內(nèi)存使用。
    • Explain 新增字段PARTITION 顯示查詢掃描的分區(qū),possible_keys 支持更精準(zhǔn)的索引建議。

12. 窗口函數(shù)與慢查詢優(yōu)化

  • 答案

    • 用窗口函數(shù)替代子查詢:減少嵌套查詢的性能開銷。

    • 示例:計(jì)算每行的累計(jì)銷售額:

      SELECT 
          date, 
          sales, 
          SUM(sales) OVER (ORDER BY date) AS cumulative_sales 
      FROM sales;
      

13. 分布式事務(wù)與 Group Replication

  • 答案

    • Group Replication 2.1:MySQL 8.0 引入更高效的沖突檢測(cè)和自動(dòng)修復(fù)機(jī)制。
    • 多主模式:支持多節(jié)點(diǎn)同時(shí)寫入,提升高可用性。

14. 全局事務(wù)標(biāo)識(shí)符(GTID)

  • 答案

    • 默認(rèn)啟用:MySQL 8.0 默認(rèn)開啟 GTID(gtid_mode=ON),簡化主從復(fù)制管理。
    • 作用:通過唯一事務(wù) ID 確保數(shù)據(jù)一致性,避免復(fù)制跳躍。

15. 臨時(shí)表與事務(wù)

  • 答案

    • 事務(wù)內(nèi)臨時(shí)表:MySQL 8.0 允許在事務(wù)中創(chuàng)建臨時(shí)表,且事務(wù)回滾時(shí)臨時(shí)表不會(huì)被刪除(需手動(dòng) DROP)。

總結(jié):MySQL 8.0 核心優(yōu)化方向

  • 性能:并行查詢、在線 DDL、JSON 優(yōu)化。
  • 功能:窗口函數(shù)、CTE、遞歸查詢。
  • 高可用:Group Replication 2.1、GTID。
  • 兼容性:默認(rèn)認(rèn)證插件、動(dòng)態(tài)數(shù)據(jù)字典。

基于DBLens for MySQL這一專業(yè)化數(shù)據(jù)庫工具,文中所有SQL邏輯均完成部署與驗(yàn)證。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、基礎(chǔ)概念與核心差異 1. 默認(rèn)字符集的變化 問: MySQL 5.7 和 8.0 的默認(rèn)字符集有何不同?為什...
    DBLens數(shù)據(jù)庫管理閱讀 127評(píng)論 0 0
  • MySQL8新特性概述MySQL從5.7版本直接跳躍發(fā)布了8.0版本 ,可見這是一個(gè)令人興奮的里程碑版本。MySQ...
    c_gentle閱讀 3,567評(píng)論 0 1
  • 對(duì)于MySQL的歷史,相信很多人早已耳熟能詳,這里就不要贅述。下面僅從產(chǎn)品特性的角度梳理其發(fā)展過程中的里程碑事件。...
    零一間閱讀 1,813評(píng)論 1 21
  • 一、賬戶與安全 用戶創(chuàng)建和授權(quán) MySQL8.0 創(chuàng)建用戶和用戶授權(quán)的命令需要分開執(zhí)行: 8.0 中默認(rèn)的 use...
    _大叔_閱讀 1,198評(píng)論 0 1
  • 默認(rèn)字符集由latin1變?yōu)閡tf8mb4:在8.0版本之前,默認(rèn)字符集為latin1,utf8指向的是utf8m...
    mysia閱讀 859評(píng)論 1 10

友情鏈接更多精彩內(nèi)容