【導讀】
與朋友或同事談到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 - 主站蜘蛛池模板: 枝江市| 临江市| 乌审旗| 全州县| 安溪县| 莱州市| 临朐县| 高淳县| 钟山县| 白银市| 牡丹江市| 荆门市| 利辛县| 鄱阳县| 石台县| 柳林县| 宝坻区| 高雄县| 那坡县| 龙海市| 永德县| 睢宁县| 安化县| 滦南县| 禹州市| 齐齐哈尔市| 广西| 广宗县| 凌源市| 佳木斯市| 青冈县| 屏山县| 丹棱县| 沭阳县| 鲁甸县| 广丰县| 七台河市| 崇义县| 横山县| 迁西县| 广南县|