MySQL的查詢緩存是MySQL內置的一種緩存機制,能夠針對sql進行緩存。好比咱們發送select * from mysql.user這麼一個查詢,MySQL首先檢索內存中是否有數據而且數據是否過時,若是沒有數據或者數據已通過期就去數據庫中查找,若是有數據而且沒有過時就直接返回數據。對於sql的匹配規則很是簡單,就是字符串的比較,只要字符串相同,那麼就認爲是同一個查詢。這裏的字符串相同並非表示sql語義相同,而是查詢的sql字符串相同,空格也不行。mysql
查詢緩存的開啓在my.cnf配置文件中,修改查詢緩存相關參數就能夠完成。(RDS在管理後臺進行配置)sql
參數解釋數據庫
query_caceh_type | 是否開啓查詢緩存緩存 0 表示不開啓查詢緩存 |
query_cache_size | 給緩存分配的最大內存空間 |
query_cache_limit | 指定單個查詢可以使用的緩存大小 |
query_cache_wlock_invalidate | 針對myisam存儲引擎(因此採用非myisam引擎的就不須要考慮了),設置當有write lock在某個table上面的時候,讀請求是要等待write lock釋放資源以後再查詢仍是容許直接從query cache中讀取結果,默認是OFF,能夠直接從query cache中取得結果。spa |
咱們可使用 show global status like 'Qcache%'; 來查看查詢緩存的使用狀態。對象
參數解釋排序
Qcache_free_blocks | 目前還處於空閒狀態的 Query Cache 中內存 Block 數目 |
Qcache_free_memory | 目前還處於空閒狀態的 Query Cache 內存總量 |
Qcache_hits | 命中次數 |
Qcache_inserts | 向 Query Cache 中插入新的 Query Cache 的次數,也就是沒有命中的次數 |
Qcache_lowmem_prunes | 當 Query Cache 內存容量不夠,須要從中刪除老的 Query Cache 以給新的 Cache 對象使用的次數 |
Qcache_not_cached | 沒有被 Cache 的 SQL 數,包括沒法被 Cache 的 SQL 以及因爲 query_cache_type 設置的不會被 Cache 的 SQL |
Qcache_queries_in_cache | 目前在 Query Cache 中的 SQL 數量 |
Qcache_total_blocks | Query Cache 中總的 Block 數量 |
配置文件的query_caceh_type參數有三個選項。內存
其中0 表示不開啓查詢緩存,也就是說任何SQL都沒法使用查詢緩存。ci
1 表示始終開啓查詢緩存,也就是說全部的SQL都會被緩存。當咱們認爲某一項業務的SQL會頻繁變化(例如利用用戶座標排序),那麼咱們可使用sql_no_cache指定此SQL不進入緩存,從而減小性能開銷。例如:select sql_no_cache * from user;
2 表示按需開啓查詢緩存,也就是說全部的SQL在不指定狀況下都不會被緩存。只有使用sql_cache的SQL纔會被緩存。例如:select sql_cache * from user;