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
-- 以下視為不同查詢,分別緩存
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