【導讀】
與朋友或同事談到mysql查詢緩存功能的時候,個人喜歡把Query Cache比作荔枝,是非常營養的東西,但是一次性吃太多了,就容易導致上火而流鼻血,雖然不是特別恰當的比喻,但是有很多相似的地方,另外Query Cache有其特殊的業務場景,也不像其他數據庫產品,緩存查詢語句的執行計劃等信息,而是直接緩存查詢語句的記錄集和對應的SQL語句。本文就給大家介紹下查詢緩存的相關知識,希望可以引導大家正確地使用Query Cache這個獨門武器。
對mysql查詢緩存從五個角度進行詳細的分析:Query Cache的工作原理、如何配置、如何維護、如何判斷查詢緩存的性能、適合的業務場景分析。
n 工作原理
查詢緩存的工作原理,基本上可以用二句話概括:
l 緩存SELECT操作或預處理查詢(注釋:5.1.17開始支持)的結果集和SQL語句;
l 新的SELECT語句或預處理查詢語句,先去查詢緩存,判斷是否存在可用的記錄集,判斷標準:與緩存的SQL語句,是否完全一樣,區分大小寫;
查詢緩存對什么樣的查詢語句,無法緩存其記錄集,大致有以下幾類:
l 查詢語句中加了SQL_NO_CACHE參數;
l 查詢語句中含有獲得值的函數,包涵自定義函數,如:CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ等;
l 對系統數據庫的查詢:mysql、information_schema
l 查詢語句中使用SESSION級別變量或存儲過程中的局部變量;
l 查詢語句中使用了LOCK IN SHARE MODE、FOR UPDATE的語句
l 查詢語句中類似SELECT …INTO 導出數據的語句;
l 事務隔離級別為:Serializable情況下,所有查詢語句都不能緩存;
l 對臨時表的查詢操作;
l 存在警告信息的查詢語句;
l 不涉及任何表或視圖的查詢語句;
l 某用戶只有列級別權限的查詢語句;
查詢緩存的優缺點:
l 不需要對SQL語句做任何解析和執行,當然語法解析必須通過在先,直接從Query Cache中獲得查詢結果;
l 查詢緩存的判斷規則,不夠智能,也即提高了查詢緩存的使用門檻,降低其效率;
l Query Cache的起用,會增加檢查和清理Query Cache中記錄集的開銷,而且存在SQL語句緩存的表,每一張表都只有一個對應的全局鎖;
n 配置
是否啟用mysql查詢緩存,可以通過2個參數:query_cache_type和query_cache_size,其中任何一個參數設置為0都意味著關閉查詢緩存功能,但是正確的設置推薦query_cache_type=0。
l query_cache_type
值域為:0 - 主站蜘蛛池模板: 江华| 滨州市| 沙河市| 德保县| 墨玉县| 永宁县| 鹤庆县| 皋兰县| 惠安县| 清丰县| 招远市| 堆龙德庆县| 汉源县| 灵台县| 隆化县| 宁晋县| 仪征市| 上林县| 浏阳市| 宁远县| 道孚县| 凤山县| 滁州市| 隆林| 和田县| 红安县| 怀安县| 铅山县| 文化| 金寨县| 达孜县| 泽库县| 勃利县| 临沂市| 浦北县| 呈贡县| 获嘉县| 容城县| 胶南市| 贞丰县| 达拉特旗|