首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 查詢快取 (Query Cache) 機制詳解:快取文本+結果、失效條件、參數調校、不適用場景

     編輯:MySQL 綜合教學

前言

Query Cache (QC) 將「完全相同的 SQL 文本」與「結果集」快取在記憶體,命中時跳過解析/優化/執行,極速回應。但**任何表異動即失效**,頻繁寫入場景反而拖慢效能。本文完整解析機制、參數、適用性判斷。

核心機制

  • 快取 Key = **逐位元組相同的 SQL 文本** (大小寫、空格、註解皆影響)。
  • SELECT * FROM t ≠ Select * from t (大小寫不同 → 視為不同查詢)。
  • 不同預設資料庫、協議版本、字符集 → 視為不同查詢。

失效條件 (任一觸發即清空相關快取)

  • 表資料異動:INSERT/UPDATE/DELETE/TRUNCATE
  • 表結構異動:ALTER TABLE/DROP TABLE/DROP DATABASE
  • 關聯 MERGE 表異動

→ **頻繁寫入的表完全不適合開啟 QC**,快取命中率極低且維護開銷大。

查詢快取參數 (SHOW VARIABLES LIKE '%query_cache%')

參數預設/範例值說明
have_query_cacheYES是否支援 QC
query_cache_limit1048576 (1MB)單一查詢結果最大快取大小
query_cache_min_res_unit4096 (4KB)快取區塊最小單位,影響碎片率
query_cache_size599040 (~600KB)**總快取記憶體大小**,0 = 關閉
query_cache_typeONON/DEMAND/OFF,DEMAND 需 SQL_CACHE 提示
query_cache_wlock_invalidateOFF寫鎖時是否失效快取

適用性判斷清單

場景建議
靜態/低頻寫入、高重複查詢 (設定表、字典表、報表快照)✅ 開啟 QC,顯著提升
高頻寫入 (訂單、日誌、計數器)❌ 關閉 QC (query_cache_size=0)
大結果集、低重複率❌ 關閉,佔記憶體無效益

MySQL 8.0 移除 Query Cache

MySQL 8.0 已**完全移除** Query Cache,建議改用應用層快取 (Redis) 或 ProxySQL 查詢快取。

延伸閱讀

  • 使用 MySQL 臨時表加速查詢
  • MySQL 修改表結構索引操作
  • MySQL 修改表結構增刪欄位
  • 10 大常用 MySQL 命令列指令
  • 7 大常用 MySQL 命令列指令
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved