【面試】MySQL 面試常見優化問題

1. 為什么要建索引?索引一定能提高性能嗎?

  • 場景:一個表有上千萬數據,查詢 SELECT * FROM user WHERE age=25;

  • 問題:沒有索引時會全表掃描,性能差。

  • 解決方案

    • age 建立普通索引,加快查詢。

    • 但是索引不是越多越好:

      • 插入、更新會更慢(需要維護索引)。

      • 索引在選擇性差(如 gender 字段只有男女)時可能沒效果。

2. 覆蓋索引是什么?為什么快?

  • 場景:查詢用戶 ID 列表:

    SELECT id FROM user WHERE age = 25;
    
  • 說明:如果 age 上有索引,且查詢只需要返回 id(在索引樹中已包含),就不用回表。

  • 優化點:建組合索引 (age, id),查詢時只走索引層,不訪問數據頁。

3. COUNT(*) 為什么慢?如何優化?

  • 場景:統計 order 表的總數,有上千萬行。

  • 問題COUNT(*) 會逐行掃描統計。

  • 優化方法

    • 如果是估算:用 EXPLAINrows

    • 如果是精確計數:可以做 冗余表緩存(Redis)。

    • InnoDB 會遍歷二級索引+主鍵,不像 MyISAM 有行數緩存。

4. SQL 執行慢的常見原因?

  • 場景:某個 SQL 在測試庫很快,但生產庫很慢。

  • 常見原因

    1. 沒有走索引,發生全表掃描。

    2. 走了索引但選擇性差,優化器放棄。

    3. 隱式轉換(WHERE phone = 1380000,字段是 VARCHAR)。

    4. 統計信息不準。

  • 解決

    • 查看 EXPLAIN

    • 強制索引 FORCE INDEX

    • 優化字段類型,避免隱式轉換。

    • 更新統計信息 ANALYZE TABLE user;

5. 什么時候建組合索引?最左匹配原則怎么理解?

  • 場景:經常有查詢:

    SELECT * FROM user WHERE country = 'CN' AND age = 25;
    
  • 說明

    • 建組合索引 (country, age),比單列索引效率高。

    • 最左匹配:索引從最左邊開始生效,(a,b,c) 等價于 (a)(a,b),但不會用 (b) 單獨索引。

  • 優化點

    • 多條件查詢,優先建組合索引。

    • 條件字段順序,選擇性高的放前面。

6. 如何優化分頁查詢?

  • 場景

    SELECT * FROM orders ORDER BY create_time LIMIT 100000, 20;
    

    很慢,因為 MySQL 先掃描10萬行再丟棄。

  • 優化方法

    1. 記錄上一次的偏移:

      SELECT * FROM orders WHERE id > 100000 LIMIT 20;
      
    2. 用覆蓋索引 + join:

      SELECT o.* FROM orders o
      JOIN (SELECT id FROM orders ORDER BY id LIMIT 100000, 20) t
      ON o.id = t.id;
      

7. 為什么要分庫分表?分庫分表后怎么查?

  • 場景user 表超過 1 億行,查詢、寫入都慢。

  • 優化思路

    • 分庫分表:按 user_id % 8 拆成 8 張表。

    • 查詢時通過中間件(ShardingSphere、Mycat)路由。

    • 跨庫統計問題 → 用 中間件聚合異步匯總表

8. InnoDB 和 MyISAM 的區別?為什么選擇 InnoDB?

  • 場景:設計電商訂單表。

  • 區別

    • InnoDB:支持事務、行鎖、MVCC,適合高并發。

    • MyISAM:表鎖、無事務、計數快,適合只讀場景。

  • 面試要點:幾乎所有業務型系統用 InnoDB,因為數據安全更重要。

9. 大表優化思路?

  • 場景:訂單表 5 億行,查詢和維護很慢。

  • 優化點

    1. 水平拆分(分庫分表)。

    2. 冷熱數據分離:歷史數據歸檔。

    3. 索引優化:只建必要索引。

    4. 讀寫分離:主庫寫,從庫讀。

    5. 緩存:Redis 緩存熱點數據。

10. 如何排查慢查詢?

  • 步驟

    1. 打開慢查詢日志:

      slow_query_log = ON
      long_query_time = 1
      
    2. EXPLAIN 分析執行計劃。

    3. 觀察是否用到索引、rows 預估數。

    4. SHOW PROFILE 查看耗時階段。

    5. 實在不行,用 pt-query-digest 工具分析日志。

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

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

相關文章

Access開發導出PDF的N種姿勢,你get了嗎?

目錄 基礎篇:一行代碼搞定 實戰篇:讓導出更智能 進階篇:用戶體驗升級 總結 hi,大家好呀! 今天我們來聊聊一個非常實用的功能——如何用VBA將Access中的數據導出為PDF。 相信很多朋友在日常工作中都遇到過這樣的需…

JavaAI炫技賽:電商系統商品管理模塊的創新設計與實踐探索

一、引言電商行業的競爭日益激烈,電商系統商品管理模塊的高效性、智能化程度成為企業提升競爭力的關鍵因素。Java 作為企業級開發的主流語言,憑借其穩定性和強大的生態系統,在電商系統開發中占據重要地位。而 AI 技術的融入,為商品…

關于如何在PostgreSQL中調整數據庫參數和配置的綜合指南

關于如何在PostgreSQL中調整數據庫參數和配置的綜合指南 PostgreSQL是一個非常通用的數據庫系統,能夠在低資源環境和與各種其他應用程序共享的環境中高效運行。為了確保它將在許多不同的環境中正常運行,默認配置非常保守,不太適合高性能生產數據庫。加上地理空間數據庫具有…

wps的excel如何轉為谷歌在線表格

1.?打開 Google Sheets(sheets.google.com)。 2.?新建一個空白表格。3.?點擊菜單 文件 → 導入 (File → Import)。4.?選擇在 WPS 保存好的 .xlsx 文件上傳。5.?選擇 “新建表格” 或 “替換當前表格”,就能直接在 Google Sheets 使用注…

貓頭虎AI 薦研|騰訊開源長篇敘事音頻生成模型 AudioStory:統一模型,讓 AI 會講故事

🐯貓頭虎薦研|騰訊開源長篇敘事音頻生成模型 AudioStory:統一模型,讓 AI 會講故事 大家好,我是貓頭虎 🐯🦉,又來給大家推薦新鮮出爐的 AI 開源項目! 這次要聊的是騰訊 A…

收藏!VSCode 開發者工具快捷鍵大全

一、文件操作快捷鍵1. 打開與關閉文件Ctrl O(Windows/Linux)或 Command O(Mac):打開文件,可以通過輸入文件名快速查找并打開相應文件。Ctrl W(Windows/Linux)或 Command W&#…

Simulations RL 平臺學習筆記

1. 選擇標準 1.1 開源項目,🌟star數量越多越好 2. 常見平臺 2.1 🌟18.6k ML-Agents:基于Unity實現 2.2 🌟1.2k Godot RL Agents

【國內電子數據取證廠商龍信科技】IOS 逆向脫殼

我們都知道,大多數的 APP 在開發的時候一般都會加上一層殼,例如 愛加密、梆梆、360、網易易盾等等。那 APK 的脫殼我們見得多了,那 IOS 逆向脫殼又是怎樣子的呢?首先咱們先了解一下為什么要砸殼,因為 IOS 開發者開發軟…

基于STM32單片機溫濕度PM2.5粉塵甲醛環境質量wifi手機APP監測系統

1 基于STM32單片機溫濕度PM2.5粉塵甲醛環境質量WiFi手機APP監測系統 本系統旨在實現對環境中溫度、濕度、PM2.5粉塵濃度以及甲醛濃度的實時監測,并通過WiFi技術將數據傳輸至手機APP端,實現移動化與可視化的環境質量檢測。系統在硬件上主要依賴STM32單片…

用C++實現日期類

在上學的時候,總是在計算還有多少天放假;在上班的時候,總是在計算還有多久發工資?我們一般通過日歷得到結果,那自己能不能實現一些基本的功能呢?答案是可以的!需要實現內容:1. 日期加…

百度網盤基于Flink的實時計算實踐

01 概覽 隨著數字化轉型的來臨,企業對于數據服務的實時化需求日益增長,在大規模數據和復雜場景的情況下,Flink在實時計算數據鏈路中扮演著極為重要的角色,本文介紹了網盤如何通過 Flink 構建實時計算引擎,從而提供高性…

【CMake】策略

目錄 一.CMake策略簡要理解 1.1.第一階段:童年時期(舊行為,The "Old Way") 1.2.第二階段:成長與改進(引入新行為,The "New Way") 1.3.第三階段:…

LLM中的function call

1. 概念 **Function Call(函數調用)**是指在編程中,程序可以通過調用預定義的函數來執行特定的操作。在LLM中,函數調用的概念擴展了模型的能力,使其不僅能夠生成文本,還能與外部系統進行交互。通過函數調用…

【系統架構設計(13)】項目管理上:盈虧平衡分析與進度管理

文章目錄零、核心思想:經濟性與時效性的動態平衡一、盈虧平衡分析:項目的經濟生命線1、核心公式與決策邏輯二、進度管理:項目的時效生命線1. **工作分解結構(WBS)**2. 進度管理流程3、關鍵路徑法關鍵路徑法&#xff08…

【SuperSocket 】利用 TaskCompletionSource 在 SuperSocket 中實現跨模塊異步處理客戶端消息

利用 TaskCompletionSource 在 SuperSocket 中實現跨模塊異步處理客戶端消息 在使用 SuperSocket 構建 TCP 服務時,我們經常會遇到這樣的需求: 服務端接收到客戶端數據后,需要將數據交給其他模塊處理處理完成后再將結果返回給調用模塊或客戶端…

《IC驗證必看|semaphore與mailbox的核心區別》

月薪30K驗證工程師必答:SystemVerilog中semaphore與mailbox的核心區別,及必須用semaphore的場景深度解析 在驗證工程師的技能體系里,線程同步與資源管控是區分“基礎會用”(20K水平)和“精通工程化”(30K水…

Spring線程池ThreadPoolTaskExecutor?詳解

ThreadPoolTaskExecutor?寫法Bean(name "taskExecutor") public ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(8); // 8核CPU服務器建議值executor.setMaxPoolSize(…

Unity之安裝教學

UnityHub下載 下載官網地址:Unity Hub下載地址 打開網址右上角,登錄/注冊賬號 登錄完畢后,點擊下載 安裝Unity Hub 雙擊傻瓜式安裝 安裝完成 啟動UnityHub 雙擊啟動 左上角設置 設置中文 左上角登錄賬號 添加免費許可證 設置-許可證-添加 安裝…

Redis 集群模式與高可用機制

最近在準備面試,正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解,以及高頻業務場景的應對策略系統梳理一遍,既能加深記憶,也能讓知識體系更扎實,供大家參考,歡迎討論。在分布式環境下&a…

Flutter + Web:深度解析雙向通信的混合應用開發實踐

Flutter Web:深度解析雙向通信的混合應用開發實踐 前言 在當今快速發展的移動應用開發領域,開發者們始終在尋求一種能夠平衡開發效率、跨平臺能力和用戶體驗的完美方案。原生開發性能卓越,但雙平臺(iOS/Android)開發…