開啟查詢語句緩衝也是最佳化MySQL的一個策略。
MySQL 是我們開發程式常用的資料庫。它具有在記憶體中緩衝常用查詢語句的能力,這樣一個給定的查詢語句再次被調用時,MySQL將立即從緩衝中將其返回。然而, 在大多數MySQL中,這一特性預設是被禁用的。為了啟用它,向你的MySQL配置選項檔案添加以下代碼;該設定檔的名稱為my.cnf,它用來聲明變數和你的MySQL伺服器的行為
啟用MySQL的查詢語句緩衝:
在這裡,我們將查詢語句緩衝設為64MB:
| 代碼如下 |
複製代碼 |
[mysqld] query_cache_size=64M |
當前查詢語句緩衝的大小,可以通過MySQL的SHOW VARIABLES命令來查看:
| 代碼如下 |
複製代碼 |
query_cache_size |555-55554 query_cache_type | ON
|
我們需要不斷地實驗查詢語句緩衝大小的設定。緩衝太小就意味著緩衝了的查詢語句很快就會到期。緩衝太大就意味著搜尋一個緩衝可能需要花費相對較長時間;還有就是使用記憶體進行緩衝比使用其它一些方式要好,就像有更多的web伺服器處理,memcache或者作業系統的檔案快取一樣。
查詢快取介紹
查詢快取的工作原理,基本上可以概括為:
緩衝SELECT操作或預先處理查詢(注釋:5.1.17開始支援)的結果集和SQL語句;
新的SELECT語句或預先處理查詢語句,先去查詢快取,判斷是否存在可用的記錄集,判斷標準:與緩衝的SQL語句,是否完全一樣,區分大小寫;
查詢快取對什麼樣的查詢語句,無法緩衝其記錄集,大致有以下幾類:
查詢語句中加了SQL_NO_CACHE參數;
查詢語句中含有獲得值的函數,包涵自訂函數,如:CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ等;
對系統資料庫的查詢:mysql、information_schema
查詢語句中使用SESSION層級變數或預存程序中的局部變數;
查詢語句中使用了LOCK IN SHARE MODE、FOR UPDATE的語句
查詢語句中類似SELECT …INTO 匯出資料的語句;
交易隔離等級為:Serializable情況下,所有查詢語句都不能緩衝;
對暫存資料表的查詢操作;
存在警告資訊的查詢語句;
不涉及任何錶或視圖的查詢語句;
某使用者只有列層級許可權的查詢語句;
查詢快取的優缺點:
不需要對SQL語句做任何解析和執行,當然文法解析必須通過在先,直接從Query Cache中獲得查詢結果;
查詢快取的判斷規則,不夠智能,也即提高了查詢快取的使用門檻,降低其效率;
Query Cache的起用,會增加檢查和清理Query Cache中記錄集的開銷,而且存在SQL語句緩衝的表,每一張表都只有一個對應的全域鎖;