您好,登錄后才能下訂單哦!
一、查詢緩存的誤區
剛接觸QC時,覺得是個好東西,可以將查詢的結果放到QC中,這樣極大的提升查詢的速度,但是后來了解到如果對表進行做DML或者DDL,QC相對應的緩存就會釋放,這樣對于頻繁更改的數據庫是沒有任何意義的。
二、查詢緩存場景
每次執行select結果,會放到查詢緩存中,這樣下次在執行的時候,就不需要具體的執行sql,只要訪問查詢訪問中的緩存即可。
適合的場景:
1、select
2、訪問大量的數據才有必要緩存其結果
3、返回少量數據
大量的分組、聚合、計算
查詢緩存才不至于變得非常大
對于普通的交易系統來說,這個查詢 意義不大,都是一些簡單的sql,甚至于還有副作用。
執行一次成本很高,結果集又很小,這種sql值得被緩存。
三、查詢緩存的配置
1、將query_cache_type,這是靜態參數,需要重啟數據庫。
0是關閉查詢緩存
1打開查詢緩存,緩存所有的sql語句的結果,除非select sql_no_cache 提示,表示這個結果不放在緩存里面。
2打開查詢緩存,但是只是緩存select sql_cache 對應的結果集。 比較推薦使用
2、query_cache_size調整查詢緩存的大小
四、查詢緩存演示
開啟查詢緩存,MySQL中的select就會放到查詢緩存中,無論什么操作,第一次放到QC中,再次執行的時候就會直接到QC中查詢,這樣Qcache_hits 就會加一,但是如果對該表做DML或者DDL,本來放到QC中的緩存就會被釋放。
1、沒有任何操作
| Qcache_hits | 0 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 0 |
2、執行
select * from t1 where id=1;
| Qcache_hits | 0 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 1 |
select * from t1 where id=1;
| Qcache_hits | 1 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 1 |
insert into t1 values(4,'dfd');
| Qcache_hits | 1 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 0 |
select * from t1 where id=1;
| Qcache_hits | 1 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 1 |
select * from t1 where id=1;
| Qcache_hits | 2 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 1 |
mysql> reset query cache;
Query OK, 0 rows affected (0.00 sec)
| Qcache_hits | 2 |
| Qcache_inserts | 2 |
| Qcache_queries_in_cache | 0 |
五、查詢緩存中的參數
| Qcache_free_blocks | 1 | #指的是空閑塊數,指的是系統分配給MySQL進程的緩存總大小空間中還沒有使用的空間
| Qcache_free_memory | 20953960 | #空閑空間,指的是還沒有被操作系統分配出去的內存空間。
| Qcache_hits | 12 | #指的是命中次數
| Qcache_inserts | 3 | #向緩存空間中插入的緩存的次數
| Qcache_lowmem_prunes | 0 | #內存太小,修剪內存的次數
| Qcache_not_cached | 0 | #指沒有命中的次數
| Qcache_queries_in_cache | 0 | #緩存的個數
| Qcache_total_blocks | 1 | #總塊數,指的是系統分配給MySQL進程的緩存總大小空間
flush query_cache #碎片整理
reset query_cache #清空緩存
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。