mysql查詢快取用於儲存mysql查詢語句返回的完整結果,被命中時,mysql會立即返回結果,省去解析、優化和執行等操作
如何檢查快取??
mysql儲存結果於快取中:
把select語句本身做hash計算,計算的結果作為key,查詢結果作為value
什麼樣的語句不會被快取?
查詢語句中有一些不確定資料時,不會快取;例如now ,current_time();一般來說,如果查詢中包含使用者自定義函式、儲存函式、使用者變數、臨時表、mysql庫中系統表、或者任何包含許可權的表,一般都不會快取
快取會帶來額外開銷
1、每個查詢都會先檢查是否命中
2、查詢結果要先快取
mysql> show global variables like 'query_cache%';
query_cache_limit 單個快取物件的最大值,超出時則不予快取;手動使用sql_no_cache可以人為的避免嘗試快取返回超出此引數限定值得語句
query_cache_min_res_unit 儲存快取的最小記憶體塊 (query_cache_size-qcache_free_memory)/qcache_queries_in_cache能夠獲得乙個理想的值
query_cache_size 總空間。單位為位元組,大小必須為1024的整數倍。mysql啟動時,會一次分配並立即初始化這裡指定大小的記憶體空間;這意味著,如果修改此大小,會清空快取並重新初始化的
query_cache_type 查詢快取型別;是否開啟快取功能,開啟方式有三種,demand:意味著select語句明確使用sql_cache選項才會快取
query_cache_wlock_invalidate 如果某個表被其他使用者連線鎖住了,是否仍然從快取中返回結果,off表示返回
如何判斷命中率:
分為次數和位元組命中率
mysql> show global status like 'qcache%';
qcache_free_blocks 空閒塊數
qcache_free_memory 空閒空間
qcache_hits 命中次數
qcache_inserts 向快取空間中插入的快取的次數
qcache_lowmem_prunes 記憶體太小,修剪記憶體的次數
qcache_not_cached 沒被快取的個數
qcache_queries_in_cache 快取中快取的查詢個數
qcache_total_blocks 總塊數
碎片整理 flush query_cache
清空快取 reset query_cache
計算命中率:
show global status where vaiable_name='qcache_hits' or variable_name='com_select';
qcache_hits/(qcache_hits+com_select)
快取優化思路
1.批量寫入,而非多次單個寫入
2.快取空間不宜過大,因為大量快取同事失效時會導致伺服器假死
3.必要時,使用sql_cache和sql_no_cache手動控制快取。
4.對寫密集型的應用場景來說,禁用快取反而提高效能。
mysql資料快取查詢 Mysql查詢快取
查詢快取 mysql提供了一種快取型別,會快取整個select查詢結果。mysql查詢快取儲存查詢返回的完整結果。當查詢命中該快取,mysql會立即返回結果,跳過了解析 優化和執行階段。以下兩種情況不能被快取 頻繁更新 修改的的表,所有快取資料都會失效,mysql查詢快取會跟蹤查詢中涉及的表,如果這...
mysql 查詢快取
show variables like cache my.cnf設定 mysql慢日誌 mysql有乙個功能就是可以log下來執行的比較慢的sql語句,預設是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動的時候加入一些引數。如果在my.cnf裡面修改,需增加如下幾行 lo...
mysql查詢快取
查詢快取不開啟 r mysql query select username from user where signup date curdate 開啟查詢快取 today date y m d r mysql query select username from user where signup...