MySQL查詢緩存

MySQL 查詢緩存保存查詢返回的完整結果。當查詢命中改緩存,MySQL 會馬上返回結果,跳過了解析、優化和執行階段。
查詢緩存系統會跟蹤查詢涉及查詢中的每一個表,若是這些表發生變化,那麼和這個表相關的全部查詢數據都將失效。這種機制看起來很低效,由於數據變化時極可能對應查詢結果並無變動,可是這種簡單實現方式代價很小,對於一個很是繁忙的系統來講相當重要。

MySQL 判斷緩存命中的方法很簡單:緩存存放在一個引用表中,經過一個哈希值引用,這個哈希值包含了以下因素,即查詢自己、當前要查詢的數據庫、客戶端協議的版本等。當判斷緩存是否命中時,MySQL 不會解析、「正規化」或者參數化查詢語句,而是直接使用 SQL 語句和客戶端送過來的其餘原始信息。任何字符上的不一樣,如空格。註釋等都會致使緩存不命中。
若是查詢中包含任何用戶自定義的函數、存儲函數、用戶變量、臨時表、mysql 庫中的系統表等都不會被緩存。

查詢緩存配置:
query_cache_type
是否打開查詢緩存。能夠設置成 OFF、ON 或 DEMAND。DEMAND表示只有在查詢語句中使用 SQL_CACHE 的語句才放入查詢緩存。默認爲 ON,分別對應數字 0,1,2。mysql

query_cache_size
查詢緩存使用的總內存的空間,單位是字節。這個值必須是1024的倍數,不然 MySQL 實際分配的數據會有所不一樣。默認16M。sql

query_cache_min_res_unit
查詢緩存中分配內存塊時的最小單位。設置小,浪費空間少,可是頻繁的內存申請;若是設置大,碎片會不少。數據庫

query_cache_limit
MySQL 查詢緩存的最大查詢結果。默認1M。緩存

query_cache_wlock_invalidate
若是某個數據表被其餘的鏈接鎖住,是否仍然從查詢緩存中返回結果。默認是 OFF。

手動設置查詢緩存:
SQL_CACHE 和 SQL_NO_CACHE
OFF/0,不緩存全部查詢結果。
ON/1,緩存全部查詢結果,SELECT SQL_NO_CACHE .... 指定不緩存。
DEMAND/2,顯示指定緩存結果,SELECT SQL_CACHE .... 指定緩存。函數

相關文章
相關標籤/搜索