查詢緩存: MySQL提供的數據緩存QueryCache,用於緩存SELECT查詢的結果 預設不開啟,需要在配置文件中開啟緩存(my.ini/my.cnf) 在[mysqld]段中,修改query_cache_type完成配置: 0:關閉 1:開啟,但是預設緩存,需要增加sql-no-cache提示 ...
查詢緩存:
MySQL提供的數據緩存QueryCache,用於緩存SELECT查詢的結果
預設不開啟,需要在配置文件中開啟緩存(my.ini/my.cnf)
在[mysqld]段中,修改query_cache_type完成配置:
0:關閉
1:開啟,但是預設緩存,需要增加sql-no-cache提示,放棄緩存(自動全部存,手動設置哪些不存)
2:開啟,但是預設不緩存,需要增加sql-cache提示,執行緩存(不自動存,手動設置存哪些)
配置完畢後重啟mysql服務
使用命令:
SHOW VARIABLES LIKE 'query_cache_type';
如果VALUE顯示是DEMAND,代表開啟了,是2的方式(通常使用2的方式)
設置緩存大小:
配置query_cache_size:
SHOW VARIABLES LIKE 'query_cache_size';
查看到VALUE是1048576
修改緩存大小:例如這裡修改為64M
SET GLOBAL query_cache_size = 64*1024*1024;
如何查詢和緩存:
1的情況下直接執行SELECT語句就可以,如果不想緩存,修改語句為:
SELECT sql_no_cache * FROM STUDENT WHERE ID=1;
2的情況下需要緩存,那麼修改語句為:
SELECT sql_cache * FROM STUDENT WHERE ID=1;
緩存後,再次執行該SELECT語句耗時接近0秒
重置緩存:
RESET QUERY CACHE;
緩存失效時間:
如果我們執行這條語句
INSERT INTO STUDENT (ID,USER) VALUES (1,'XXX');
那麼上面的緩存將會被刪除
也就是說,當數據表改動時,基於該數據表的任何緩存,都會被刪除,是一個表層面的管理,而不是記錄層面的管理
動態數據無法被緩存:
比如當前時間,是無法緩存的
SELECT sql_cache *,NOW() FROM STUDENT;
緩存的檢索:
緩存的檢索是依賴於SQL語句的字元串規則,也就是說,修改了大小寫或者多加了一個空格,也會失效