MySQL面試知識點詳解

一、MySQL基礎架構

1. MySQL邏輯架構

MySQL采用分層架構設計,主要分為:

  • 連接層:處理客戶端連接、授權認證等

  • 服務層:包含查詢解析、分析、優化、緩存等

  • 引擎層:負責數據存儲和提取(InnoDB、MyISAM等)

2. 查詢執行流程

  1. 客戶端發送SQL語句

  2. 連接器驗證身份

  3. 查詢緩存(MySQL 8.0已移除)

  4. 分析器進行詞法語法分析

  5. 優化器生成執行計劃

  6. 執行器調用存儲引擎接口執行

二、存儲引擎對比

InnoDB vs MyISAM

特性InnoDBMyISAM
事務支持支持不支持
鎖粒度行鎖表鎖
外鍵支持不支持
崩潰恢復支持不支持
全文索引MySQL 5.6+支持支持
存儲文件.frm, .ibd.frm, .MYD, .MYI
適合場景高并發寫/事務型應用讀多寫少/非事務應用

三、索引原理與優化

1. 索引類型

  • B+樹索引:最常用,適合范圍查詢

  • 哈希索引:精確匹配快,不支持范圍查詢

  • 全文索引:用于文本搜索

  • 空間索引:用于地理數據

2. B+樹索引特點

  • 多路平衡查找樹

  • 非葉子節點只存鍵值

  • 葉子節點形成有序鏈表

  • 通常3-4層就能存儲大量數據

3. 索引優化原則

  1. 最左前綴原則

  2. 避免在索引列上使用函數

  3. 選擇合適的索引列順序

  4. 使用覆蓋索引減少回表

  5. 避免過度索引

四、事務與鎖機制

1. 事務特性(ACID)

  • 原子性(Atomicity):事務不可分割

  • 一致性(Consistency):數據狀態一致

  • 隔離性(Isolation):事務間相互隔離

  • 持久性(Durability):提交后永久生效

2. 事務隔離級別

隔離級別臟讀不可重復讀幻讀
READ UNCOMMITTED???
READ COMMITTED×??
REPEATABLE READ××?
SERIALIZABLE×××

3. 鎖類型

  • 共享鎖(S鎖):讀鎖,多個事務可同時持有

  • 排他鎖(X鎖):寫鎖,獨占資源

  • 意向鎖:表級鎖,表明事務將要獲取的行鎖類型

  • 間隙鎖:鎖定索引記錄間隙,防止幻讀

  • 臨鍵鎖:記錄鎖+間隙鎖組合

五、SQL優化技巧

1. EXPLAIN執行計劃分析

關鍵字段:

  • type:訪問類型(const > eq_ref > ref > range > index > ALL)

  • key:實際使用的索引

  • rows:預估掃描行數

  • Extra:額外信息(Using index/Using filesort等)

2. 常見優化方法

  1. 避免SELECT *,只查詢需要的列

  2. 合理使用JOIN,小表驅動大表

  3. 避免在WHERE子句中對字段進行NULL值判斷

  4. 使用LIMIT分頁時優化大偏移量查詢

  5. 避免使用OR連接條件,考慮使用UNION ALL

六、高可用與性能調優

1. 主從復制原理

  1. 主庫將變更寫入binlog

  2. 從庫IO線程讀取主庫binlog

  3. 從庫SQL線程重放binlog中的事件

2. 分庫分表策略

  • 垂直拆分:按業務維度拆分

  • 水平拆分:按數據行拆分

  • 常見中間件:MyCat、ShardingSphere

3. 性能調優參數

ini

復制

下載

# 緩沖池大小(推薦總內存的50-70%)
innodb_buffer_pool_size = 4G# 日志文件大小
innodb_log_file_size = 256M# 連接數設置
max_connections = 500
thread_cache_size = 50# 查詢緩存(MySQL 8.0已移除)
query_cache_size = 0

七、常見面試題

  1. 為什么使用B+樹而不是B樹?

    • B+樹非葉子節點不存數據,能容納更多鍵值

    • 葉子節點形成鏈表,范圍查詢更高效

    • 查詢性能更穩定(任何查詢都要到葉子節點)

  2. 什么是回表查詢?如何避免?

    • 回表:通過二級索引查到主鍵后,再通過主鍵查完整數據

    • 避免:使用覆蓋索引(查詢列都在索引中)

  3. MVCC實現原理?

    • 通過版本鏈和ReadView實現

    • 每行記錄有隱藏字段:DB_TRX_ID(事務ID)、DB_ROLL_PTR(回滾指針)

    • ReadView包含:m_ids(活躍事務列表)、min_trx_id、max_trx_id等

  4. 大表優化方案?

    • 分庫分表

    • 讀寫分離

    • 冷熱數據分離

    • 適當增加冗余字段減少JOIN

  5. 如何解決死鎖問題?

    • 設置鎖等待超時參數:innodb_lock_wait_timeout

    • 分析死鎖日志(show engine innodb status)

    • 保證事務中鎖的獲取順序一致

    • 盡量縮小事務范圍

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80137.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

牛客網NC22000:數字反轉之-三位數

牛客網NC22000:數字反轉之-三位數 🔍 題目描述 時間限制:C/C/Rust/Pascal 1秒,其他語言2秒 空間限制:C/C/Rust/Pascal 32M,其他語言64M 📝 輸入輸出說明 輸入描述: 輸入一個3位整數n (100 ≤ n ≤ 999)…

C++跨平臺開發:突破不同平臺的技術密碼

Windows 平臺開發經驗 開發環境搭建 在 Windows 平臺進行 C 開發,最常用的集成開發環境(IDE)是 Visual Studio。你可以從Visual Studio 官網下載安裝包,根據安裝向導進行安裝。安裝時,在 “工作負載” 界面中&#xff…

[250516] OpenAI 升級 ChatGPT:GPT-4.1 及 Mini 版上線!

目錄 ChatGPT 迎來重要更新:GPT-4.1 和 GPT-4.1 mini 正式上線用戶如何訪問新模型?技術亮點與用戶體驗優化 ChatGPT 迎來重要更新:GPT-4.1 和 GPT-4.1 mini 正式上線 OpenAI 宣布在 ChatGPT 平臺正式推出其最新的 AI 模型 GPT-4.1 和 GPT-4.…

計算機指令分類和具體的表示的方式

1.關于計算機的指令系統 下面的這個就是我們的一個簡單的計算機里面涉及到的指令: m就是我們的存儲器里面的地址,可以理解為memory這個意思,r可以理解為rom這樣的單詞的首字母,幫助我們去進行這個相關的指令的記憶,不…

前端腳手架開發指南:提高開發效率的核心操作

前端腳手架通過自動化的方式可以提高開發效率并減少重復工作,而最強大的腳手架并不是現成的那些工具而是屬于你自己團隊量身定制的腳手架!本篇文章將帶你了解腳手架開發的基本技巧,幫助你掌握如何構建適合自己需求的工具,并帶著你…

SpringBoot常用注解詳解

文章目錄 1. 前言2. 核心注解2.1 SpringBootApplication2.2 Configuration2.3 EnableAutoConfiguration2.4 ComponentScan2.5 Bean2.6 Autowired2.7 Qualifier2.8 Primary2.9 Value2.10 PropertySource2.11 ConfigurationProperties2.12 Profile 3. Web開發相關注解3.1 Control…

項目管理進階:全文解讀企業IT系統全生命周期管理與運營平臺建設方案【附全文閱讀】

本文介紹了《企業IT系統全生命周期管理與運營平臺建設方案》的項目內容,包括項目背景、藍圖架構、核心業務流程、系統總體架構、解決方案等。 重點內容: 1. 項目背景:介紹企業IT系統全生命周期管理的重要性。 2. 藍圖架構:描述項目…

記錄一次vue項目頁面內嵌iframe頁面實現跨域上傳和下載附件的功能

功能背景:項目部署在外網,然后其中有一個功能需要上傳下載附件,附件是上傳到華為云對象存儲服務OBS中(私有云),所以采用iframe嵌套頁面的方式解決跨域問題。 實現思路: 1、父窗口封裝一個組件專…

rust語言,與c,go語言一樣也是編譯成二進制文件嗎?

是的,Rust 和 C、Go 一樣,默認情況下會將代碼編譯成二進制可執行文件(如 ELF、PE、Mach-O 等格式),但它們的編譯過程和運行時特性有所不同: 1. Rust(類似 C,直接編譯為機器碼&#x…

后端框架(3):Spring(2)

AOP 概述:AspectOrientedProgramming 面向切面編程:是對面向對象編程的補充延續,面向切面編程思想是將程序中非業務代碼(提交事務,打印日志,權限驗證,統一異常處理) 然后在調用業務代碼時,通過…

Vue3中setup運行時機介紹

在 Vue3 中&#xff0c;直接寫在 <script setup>...</script> 中的代碼運行時機可以分為以下幾個關鍵階段&#xff1a; 一、執行順序層級 #mermaid-svg-bF3p98MiNdLfcoSG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#33…

Ubuntu快速安裝Python3.11及多版本管理

之前文章和大家分享過&#xff0c;將會出一篇專欄&#xff08;從電腦裝ubuntu系統&#xff0c;到安裝ubuntu的常用基礎軟件&#xff1a;jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等&#xff09;&#xff0c;目前…

裸金屬服務器和云服務器之間的差別

裸金屬服務器能夠直接在硬件上運行&#xff0c;不需要額外的虛化層&#xff0c;讓每個應用程序或者是服務都能夠在實際的硬件上運行&#xff0c;不需要和其他虛擬服務器來共享資源&#xff1b;而云服務器作為一種虛擬服務器&#xff0c;是通過虛擬化技術為企業提供一個獨立的計…

C++ 中的幾種鎖機制整理

1. 互斥鎖&#xff08;std::mutex&#xff09; ? 簡介 最常用的線程同步工具。保證同一時間只能有一個線程訪問臨界區。 ? 使用方式 #include <mutex>std::mutex mtx;void safeFunction() {std::lock_guard<std::mutex> lock(mtx);// 臨界區代碼 }? 優點 簡…

Graph Representation Learning【圖最短路徑優化/Node2vec/Deepwalk】

文章目錄 Q1&#xff1a;網絡性質&#xff1a;1.數據讀取與鄰接表構建&#xff1a;2.基本特征和連通性&#xff1a; 算法思路&#xff1a;1. 廣度優先搜索&#xff08;BFS&#xff09;標記前驅:2. 回溯生成所有最短路徑: 實驗結果&#xff1a;復雜度分析&#xff1a; Q2&#x…

MATLAB中的概率分布生成:從理論到實踐

MATLAB中的概率分布生成&#xff1a;從理論到實踐 引言 MATLAB作為一款強大的科學計算軟件&#xff0c;在統計分析、數據模擬和概率建模方面提供了豐富的功能。本文將介紹如何使用MATLAB生成各種常見的概率分布&#xff0c;包括均勻分布、正態分布、泊松分布等&#xff0c;并…

經典算法 (A/B) mod C

(A/B) mod C 問題描述 求(A/B)%C&#xff0c;但由于A和B實在太大了&#xff0c;我們只給出A % C&#xff0c;B % C。 (我們保證給定的A必能被B整除&#xff0c;且gcd(B,C) 1)。 輸入描述 輸入一行三個整數&#xff0c;分別是A % C&#xff0c;B % C&#xff0c;C。 輸出…

大數據技術的主要方向及其應用詳解

文章目錄 一、大數據技術概述二、大數據存儲與管理方向1. 分布式文件系統2. NoSQL數據庫3. 數據倉庫技術 三、大數據處理與分析方向1. 批處理技術2. 流處理技術3. 交互式分析4. 圖計算技術 四、大數據機器學習方向1. 分布式機器學習2. 深度學習平臺3. 自動機器學習(AutoML) 五、…

Deeper and Wider Siamese Networks for Real-Time Visual Tracking

現象&#xff1a; the backbone networks used in Siamese trackers are relatively shallow, such as AlexNet , which does not fully take advantage of the capability of modern deep neural networks. direct replacement of backbones with existing powerful archite…

ubuntu22.04卸載vscode

方法 1&#xff1a;通過 Snap 卸載 VSCode 如果你是通過 Snap 安裝的 VSCode&#xff08;Ubuntu 22.04 默認推薦方式&#xff09;&#xff0c;按照以下步驟卸載&#xff1a; 檢查是否通過 Snap 安裝&#xff1a; bash snap list | grep code如果輸出顯示 code&#xff0c;說明…