可以通過下面的sql檢視當前查詢快取相關引數狀態:
show variables like '%query_cache%';
輸出結果類似下面:
query_cache_type
查詢快取型別,有0、1、2三個取值。0則不使用查詢快取。1表示始終使用查詢快取。2表示按需使用查詢快取。
如果query_cache_type為1而又不想利用查詢快取中的資料,可以用下面的sql:
select sql_no_cache * from my_table where condition;
如果值為2,要使用快取的話,需要使用sql_cache開關引數:
select sql_cache * from my_table where condition;
query_cache_size
預設情況下query_cache_size為0,表示為查詢快取預留的記憶體為0,則無法使用查詢快取。所以我們需要設定query_cache_size的值:
set global query_cache_size = 134217728;
注意上面的值如果設得太小不會生效。比如我用下面的sql設定query_cache_size大小:
set global query_cache_size = 4000;
show warnings;
會返回下面的結果:
快取條件
查詢快取可以看做是sql文字和查詢結果的對映。如果第二次查詢的sql和第一次查詢的sql完全相同(注意必須是完全相同,即使多乙個空格或者大小寫不同都認為不同)且開啟了查詢快取,那麼第二次查詢就直接從查詢快取中取結果,可以通過下面的sql來檢視快取命中次數(是個累加值):
show status like 'qcache_hits';
另外即使完全相同的sql,如果使用不同的字符集、不同的協議等也會被認為是不同的查詢而分別進行快取。
快取資料失效時機
在表的結構或資料發生改變時,查詢快取中的資料不再有效。有這些insert、update、 delete、truncate、alter table、drop table或drop database會導致快取資料失效。所以查詢快取適合有大量相同查詢的應用,不適合有大量資料更新的應用。
可以使用下面三個sql來清理查詢快取:
1、flush query cache; // 清理查詢快取記憶體碎片。
2、reset query cache; // 從查詢快取中移出所有查詢。
3、flush tables; //關閉所有開啟的表,同時該操作將會清空查詢快取中的內容。
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...