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

MySQL 查詢緩存實戰:開啟、配置、驗證與失效機制全解析

     編輯:MySQL 綜合教學

核心參數設定

SET GLOBAL query_cache_size = 600000;      -- 緩存總大小(位元組)
SET GLOBAL query_cache_limit = 2097152;    -- 單查詢最大緩存
SET SESSION query_cache_type = ON;         -- 當前連線啟用
-- 或永久生效寫入 my.cnf:
[mysqld]
query_cache_size = 64M
query_cache_limit = 2M
query_cache_type = ON

緩存機制與適用場景

  • 緩存 SQL 文本 + 結果集,完全相同(逐字節)才命中
  • 表異動(INSERT/UPDATE/DELETE/TRUNCATE/ALTER/DROP)→ 相關緩存全量失效
  • 適合:讀多寫少、相同查詢高頻 的表(如配置表、字典表)
  • 不適合:頻繁寫入的表

大小寫與字元集影響命中

-- 以下視為不同查詢,分別緩存
SELECT * FROM tbl_name;
Select * from tbl_name;

不同資料庫、協議版本、預設字元集亦視為不同。

狀態監控關鍵指標

SHOW STATUS LIKE 'Qcache%';
+-------------------------+--------+
| Variable_name           | Value  |
+-------------------------+--------+
| Qcache_hits             | 1234   |  -- 命中次數(累計)
| Qcache_inserts          | 567    |  -- 新增緩存次數
| Qcache_not_cached       | 89     |  -- 未緩存查詢數
| Qcache_lowmem_prunes    | 12     |  -- 記憶體不足淘汰次數
| Qcache_free_memory      | 123456 |  -- 剩餘記憶體
| Qcache_total_blocks     | 789    |  -- 記憶體塊數
+-------------------------+--------+

實戰驗證流程

mysql> SET GLOBAL query_cache_size = 600000;
mysql> SET SESSION query_cache_type = ON;
mysql> USE test;
mysql> SELECT COUNT(*) FROM animals;  -- 首次執行
mysql> SHOW STATUS LIKE 'Qcache_hits';  -- 0
mysql> SELECT COUNT(*) FROM animals;  -- 二次執行
mysql> SHOW STATUS LIKE 'Qcache_hits';  -- 1 (命中)
mysql> INSERT INTO animals VALUES (9, 'test');  -- 寫入導致失效
mysql> SELECT COUNT(*) FROM animals;  -- 再次執行
mysql> SHOW STATUS LIKE 'Qcache_hits';  -- 仍為 1 (未命中,重新查詢)
mysql> SELECT COUNT(*) FROM animals;  -- 第三次
mysql> SHOW STATUS LIKE 'Qcache_hits';  -- 2 (新緩存命中)

常見誤區

  • 以為 query_cache_size > 0 即自動生效 → 需同時 query_cache_type = ON
  • 忽略大小寫差異導致命中率低
  • 頻繁寫入表開啟緩存反而拖慢效能(鎖競爭 + 失效開銷)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved