MySQL查詢快取總結

2021-07-03 15:19:03 字數 1389 閱讀 8859

可以通過下面的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...