mysql查詢快取簡單使用

pedro7發表於2021-03-06

MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關聯式資料庫管理系統) 應用軟體之一。

當我們開啟Mysql的查詢快取,當執行完全相同的SQL語句的時候,伺服器就會直接從快取中讀取結果。當資料被修改, 之前的快取會失效,所以修改比較頻繁的表不適合做查詢快取。

一、查詢快取的實現流程

查詢快取實現流程

二、配置查詢快取

1、檢視當前的mysql資料庫是否支援查詢快取

SHOW VARIABLES LIKE 'have_query_cache';

檢視當前的mysql資料庫是否支援查詢快取

2、檢視當前mysql是否開啟了查詢快取

SHOW VARIABLES LIKE 'query_cache_type';

檢視當前mysql是否開啟了查詢快取

3、檢視查詢快取的佔用大小

SHOW VARIABLES LIKE 'query_cache_size';

檢視查詢快取的佔用大小

4、檢視查詢快取的狀態變數

SHOW STATUS LIKE 'Qcache%';

檢視查詢快取的狀態變數

引數 含義
Qcache_free_blocks 查詢快取中的可用記憶體塊數
Qcache_free_memory 查詢快取的可用記憶體量
Qcache_hits 查詢快取命中數
Qcache_inserts 新增到查詢快取的查詢數
Qcache_lowmen_prunes 由於記憶體不足而從查詢快取中刪除的查詢數
Qcache_not_cached 非快取查詢的數量(由於 query_cache_type 設定而無法快取或未快取)
Qcache_queries_in_cache 查詢快取中註冊的查詢數
Qcache_total_blocks 查詢快取中的塊總數

三、開啟查詢快取

MySQL的查詢快取預設是關閉的,需要手動配置引數 query_cache_type , 來開啟查詢快取。query_cache_type
該引數的可取值有三個

含義
OFF 或 0 查詢快取功能關閉
ON 或 1 查詢快取功能開啟,SELECT的結果符合快取條件即會快取,否則,不予快取,顯式指定 SQL_NO_CACHE,不予快取
DEMAND 或 2 查詢快取功能按需進行,顯式指定 SQL_CACHE 的SELECT語句才會快取;其它均不予快取

1、在usr/my.cnf中進行配置(配置檔案也可能在/etc/my.cnf)

配置

2、重啟服務

service mysql restart

3、測試!

測試
測試
測試

四、查詢快取SELECT選項

可以在SELECT語句中指定兩個與查詢快取相關的選項

  • SQL_CACHE : 如果查詢結果是可快取的,並且 query_cache_type 系統變數的值為ON或 DEMAND ,則快取查詢 結果 。
  • SQL_NO_CACHE : 伺服器不使用查詢快取。它既不檢查查詢快取,也不檢查結果是否已快取,也不快取查詢結果
SELECT SQL_CACUE id,name FROM customer;
SELECT SQL_NO_CACHE id,name FROM customer;

五、查詢快取失效現象

1、SQL語句不一致

要想命中快取,查詢的SQL語句必須一致

SQL1:select count(*) from tb_item;
SQL2:select count(*) from tb_Item;

2、查詢語句有一些不確定的值

SQL1:select * from tb_item where updatetime < now() limit 1;
SQL2:select user();
SQL3:select database();

3、不使用任何表查詢語句

select 'A';

4、查詢mysql、information_schema或performance_schema資料庫中的表

select * from information_schema.engines;

5、在儲存的函式、觸發器或事件主體內執行的查詢

如題

6、表更改導致快取刪除

如果表更改,則使用該表的所有快取記憶體查詢都將變為無效並從快取記憶體中刪除。這包括使用 MERGE 對映到 已更改表的表的查詢。一個表可以被許多型別的語句,如被改變 INSERT, UPDATE, DELETE, TRUNCATE TABLE, ALTER TABLE, DROP TABLE,或 DROP DATABASE 。


以上便是關於mysql查詢快取簡單使用總結

相關文章