查詢快取是指儲存使用select語法查詢到的返回到客戶端的文字。當相同的請求再次發生時,會從查詢快取中獲取資料,而非再執行一遍查詢。查詢快取是共享session會話的,所以乙個客戶端的請求可能與另乙個客戶端的請求得到相同的結果。
當伺服器頻繁收到相同的請求而資料庫中的表資料變化頻率又不高,查詢快取是非常有用的,它可以大大提高應用程式的訪問效率。很多web伺服器利用這一原理基於資料庫的內容動態生成頁面。
查詢快取並不會返回過期的資料,當資料庫中的表資料發生變化時,相關的查詢快取會自動清除。但是查詢快取並不會在多個mysqld伺服器例項中更新同乙個表的資料時有效。
查詢快取對於儲存在多個資料庫分割槽表中的資料是無效的。如果查詢涉及多個資料庫分割槽表,查詢快取會自動失效。
如果要禁用查詢快取的話,只需在啟動時將query_cache_size的大小設定為0即可。
查詢快取在一定情況下會提公升系統的效能,但並不代表在任何情況下都會提公升系統的效能,某些情況下,甚至可能會降低系統的效能。如
1)人們對於分級設定查詢快取的分歧很大,有些人認為可能超出了啟用它的好處。查詢快取的大小設定為幾十兆的時候通常是有效的,但是設定成幾百兆的時候就不一定了。
2)在伺服器超負荷時使用查詢快取是非常有效的。乙個由多個select組合成的複雜查詢使用查詢快取的效率肯定是非常高效的,但如果有頻繁插入資料的話,不使用快取的話比起使用查詢快取效率要高的多。
查詢快取的執行原理
對於下面這兩種查詢,查詢快取會當作兩種不同形式的查詢,因為查詢快取會嚴格比較兩次查詢的位元組是否完全相同。對於不同的字串,不同的資料表,不同的協議版本,不同的字符集都會當作不同的查詢。
select * from tbl_name在以下情況下並不適合使用查詢快取select * from tbl_name
1)查詢是外部查詢的乙個子查詢
2)在儲存過程,觸發器或函式中執行的查詢
如果資料表發生變化,如增加/修改/刪除表結構或表資料,都會導致查詢快取失效,快取的資料會自動從快取中清除。
當查詢快取包含了以下函式時,查詢快取並不會有效。
查詢快取不適用的情況
1)查詢使用使用者自定義的函式或儲存過程。
2)查詢包含了使用者變數或本地儲存的程式變數。
3)涉及到資料庫中的mysql,information_schema和performance——schema表。
4)查詢涉及到資料庫分割槽表。
5)查詢是如下的型別:
select ... lock in share mode6)查詢用到了臨時表。select ... for update
select ... into outfile ...
select ... into dumpfile ...
select * from ... where autoincrement_col is null
7)查詢沒有用到資料表。
8)查詢包含了警告。
9)使用者查詢的表中擁有特定的許可權。
使用查詢快取和不使用查詢快取的兩種方式
select sql_cache id, name from customer;配置查詢快取當查詢快取query_cache_size設定為乙個非0的數值時,最小的容量是40kb,這是由它的系統結構所決定的。在應用時設定為多大合適,還是要根據實際情況而定。select sql_no_cache id, name from customer;
詳解MySQL查詢快取
查詢快取是指儲存使用select語法查詢到的返回到客戶端的文字。當相同的請求再次發生時,會從查詢快取中獲取資料,而非再執行一遍查詢。查詢快取是共享session會話的,所以乙個客戶端的請求可能與另乙個客戶端的請求得到相同的結果。當伺服器頻繁收到相同的請求而資料庫中的表資料變化頻率又不高,查詢快取是非...
MySQL查詢快取詳解
一 快取條件,原理 mysql query cache是用來快取我們所執行的select語句以及該語句的結果集,mysql在實現query cache的具體技術細節上類似典型的kv儲存,就是將select語句和該查詢語句的結果集做了乙個hash對映並儲存在一定的記憶體區域中。當客戶端發起sql查詢時...
mysql資料快取查詢 Mysql查詢快取
查詢快取 mysql提供了一種快取型別,會快取整個select查詢結果。mysql查詢快取儲存查詢返回的完整結果。當查詢命中該快取,mysql會立即返回結果,跳過了解析 優化和執行階段。以下兩種情況不能被快取 頻繁更新 修改的的表,所有快取資料都會失效,mysql查詢快取會跟蹤查詢中涉及的表,如果這...