詳解mysql查詢緩存簡(jiǎn)單使用
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一。
當(dāng)我們開啟Mysql的查詢緩存,當(dāng)執(zhí)行完全相同的SQL語(yǔ)句的時(shí)候,服務(wù)器就會(huì)直接從緩存中讀取結(jié)果。當(dāng)數(shù)據(jù)被修改, 之前的緩存會(huì)失效,所以修改比較頻繁的表不適合做查詢緩存。
一、查詢緩存的實(shí)現(xiàn)流程
二、配置查詢緩存
1、查看當(dāng)前的mysql數(shù)據(jù)庫(kù)是否支持查詢緩存
SHOW VARIABLES LIKE 'have_query_cache';
2、查看當(dāng)前mysql是否開啟了查詢緩存
SHOW VARIABLES LIKE 'query_cache_type';
3、查看查詢緩存的占用大小
SHOW VARIABLES LIKE 'query_cache_size';
4、查看查詢緩存的狀態(tài)變量
SHOW STATUS LIKE 'Qcache%';
參數(shù) | 含義 |
---|---|
Qcache_free_blocks | 查詢緩存中的可用內(nèi)存塊數(shù) |
Qcache_free_memory | 查詢緩存的可用內(nèi)存量 |
Qcache_hits | 查詢緩存命中數(shù) |
Qcache_inserts | 添加到查詢緩存的查詢數(shù) |
Qcache_lowmen_prunes | 由于內(nèi)存不足而從查詢緩存中刪除的查詢數(shù) |
Qcache_not_cached | 非緩存查詢的數(shù)量(由于 query_cache_type 設(shè)置而無(wú)法緩存或未緩存) |
Qcache_queries_in_cache | 查詢緩存中注冊(cè)的查詢數(shù) |
Qcache_total_blocks | 查詢緩存中的塊總數(shù) |
三、開啟查詢緩存
MySQL的查詢緩存默認(rèn)是關(guān)閉的,需要手動(dòng)配置參數(shù) query_cache_type , 來(lái)開啟查詢緩存。query_cache_type
該參數(shù)的可取值有三個(gè)
值 | 含義 |
---|---|
OFF 或 0 | 查詢緩存功能關(guān)閉 |
ON 或 1 | 查詢緩存功能打開,SELECT的結(jié)果符合緩存條件即會(huì)緩存,否則,不予緩存,顯式指定 SQL_NO_CACHE,不予緩存 |
DEMAND 或 2 | 查詢緩存功能按需進(jìn)行,顯式指定 SQL_CACHE 的SELECT語(yǔ)句才會(huì)緩存;其它均不予緩存 |
1、在usr/my.cnf中進(jìn)行配置(配置文件也可能在/etc/my.cnf)
2、重啟服務(wù)
service mysql restart
3、測(cè)試
四、查詢緩存SELECT選項(xiàng)
可以在SELECT語(yǔ)句中指定兩個(gè)與查詢緩存相關(guān)的選項(xiàng)
- SQL_CACHE : 如果查詢結(jié)果是可緩存的,并且 query_cache_type 系統(tǒng)變量的值為ON或 DEMAND ,則緩存查詢 結(jié)果 。
- SQL_NO_CACHE : 服務(wù)器不使用查詢緩存。它既不檢查查詢緩存,也不檢查結(jié)果是否已緩存,也不緩存查詢結(jié)果
SELECT SQL_CACUE id,name FROM customer; SELECT SQL_NO_CACHE id,name FROM customer;
五、查詢緩存失效現(xiàn)象
1、SQL語(yǔ)句不一致
要想命中緩存,查詢的SQL語(yǔ)句必須一致
SQL1:select count(*) from tb_item; SQL2:select count(*) from tb_Item;
2、查詢語(yǔ)句有一些不確定的值
SQL1:select * from tb_item where updatetime < now() limit 1; SQL2:select user(); SQL3:select database();
3、不使用任何表查詢語(yǔ)句
select 'A';
4、查詢mysql、information_schema或performance_schema數(shù)據(jù)庫(kù)中的表
select * from information_schema.engines;
5、在存儲(chǔ)的函數(shù)、觸發(fā)器或事件主體內(nèi)執(zhí)行的查詢
如題
6、表更改導(dǎo)致緩存刪除
如果表更改,則使用該表的所有高速緩存查詢都將變?yōu)闊o(wú)效并從高速緩存中刪除。這包括使用 MERGE 映射到 已更改表的表的查詢。一個(gè)表可以被許多類型的語(yǔ)句,如被改變 INSERT, UPDATE, DELETE, TRUNCATE TABLE, ALTER TABLE, DROP TABLE,或 DROP DATABASE 。
以上便是關(guān)于mysql查詢緩存簡(jiǎn)單使用總結(jié)
到此這篇關(guān)于詳解mysql查詢緩存簡(jiǎn)單使用的文章就介紹到這了,更多相關(guān)mysql查詢緩存使用內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。