MySQL 查詢緩存

MySQL 查詢緩存存儲(chǔ) SELECT 查詢的文本以及發(fā)送給客戶端的響應(yīng)結(jié)果幌氮。如果隨后收到一個(gè)相同的查詢糟红,服務(wù)器從查詢緩存中重新得到查詢結(jié)果纸兔,而不再需要解析和執(zhí)行查詢誓沸。如果有一個(gè)不經(jīng)常改變的表并且服務(wù)器收到該表的大量相同查詢,查詢緩存在這樣的應(yīng)用環(huán)境中十分有用塔鳍。

查詢緩存 SELECT 選項(xiàng)

SQL_CACHE
如果 query_cache_type 系統(tǒng)變量的值是 ONDEMAND伯铣,查詢結(jié)果將被緩存。示例:

SELECT SQL_CACHE pid, title, price FROM product;

SQL_NO_CACHE
查詢結(jié)果不被緩存轮纫。示例:

SELECT SQL_NO_CACHE pid, title, price FROM product;

查詢緩存的工作原理

查詢必須是完全相同的(逐字節(jié)相同)才能夠被認(rèn)為是相同的腔寡,因此下面的兩個(gè)查詢被查詢緩存認(rèn)為是不相同的:

SELECT * FROM tbl_name;
Select * from tbl_name;

如果一個(gè)表被更改了,那么使用那個(gè)表的所有緩存查詢將不再有效掌唾,并且從緩沖區(qū)中移出放前。這包括那些映射到改變了的表的使用 MERGE 表的查詢忿磅。一個(gè)表可以被許多類型的語句更改,例如:INSERT凭语、UPDATE葱她、DELETE、TRUNCATE似扔、ALTER TABLE吨些、DROP TABLE或DROP DATABASE。

另外炒辉,如果一個(gè)查詢語句包含下面函數(shù)中的任意一個(gè)豪墅,它也不會(huì)被緩存:

- - -
BENCHMARK() CONNECTION_ID() CURDATE()
CURRENT_DATE() CURRENT_TIME() CURRENT_TIMESTAMP()
CURTIME() DATABASE() 帶一個(gè)參數(shù)的ENCRYPT()
FOUND_ROWS() GET_LOCK() LAST_INSERT_ID()
LOAD_FILE() MASTER_POS_WAIT() NOW()
RAND() RELEASE_LOCK() SYSDATE()
不帶參數(shù)的UNIX_TIMESTAMP() USER()

在下面的這些條件下,查詢也不會(huì)被緩存:

  • 引用自定義函數(shù)(UDFs)黔寇。
  • 引用自定義變量但校。
  • 引用mysql系統(tǒng)數(shù)據(jù)庫(kù)中的表。
  • 下面方式中的任何一種:
    • SELECT ...IN SHARE MODE
    • SELECT ...FOR UPDATE
    • SELECT ...INTO OUTFILE ...
    • SELECT ...INTO DUMPFILE ...
    • SELECT * FROM ...WHERE autoincrement_col IS NULL
  • 使用TEMPORARY表啡氢。
  • 不使用任何表。
  • 用戶沒有某個(gè)表的列級(jí)權(quán)限术裸。

查詢緩存配置

可以使用下面的語句檢查MySQL服務(wù)器是否提供查詢緩存功能:

SHOW VARIABLES LIKE 'have_query_cache';
變量名
have_query_cache YES

所有查詢緩存系統(tǒng)變量名以 query_cache_ 開頭倘是,當(dāng)啟動(dòng) mysqld 時(shí),這些變量可以在選項(xiàng)文件或者命令行中設(shè)置袭艺〔笳福可以使用下面的語句查看MySQL服務(wù)器的查詢緩存變量:

SHOW VARIABLES LIKE 'query_cache_%';

query_cache_limit
單個(gè)結(jié)果集所被允許緩存的最大值,默認(rèn)值為1048576(1MB)猾编。

query_cache_min_res_unit
每個(gè)被緩存的結(jié)果集要占用的最小內(nèi)存(字節(jié))瘤睹,默認(rèn)值為4096(4KB)。

query_cache_size
為緩存查詢結(jié)果分配的內(nèi)存大小答倡。默認(rèn)值為0轰传,即禁用查詢緩存。請(qǐng)注意即使 query_cache_type 設(shè)置為 0 也將分配此數(shù)量的內(nèi)存瘪撇。

query_cache_type
設(shè)置查詢緩存類型获茬,默認(rèn)值為ON。設(shè)置GLOBAL值可以設(shè)置后面的所有客戶端連接的類型倔既∷∏客戶端可以設(shè)置SESSION值以影響他們自己對(duì)查詢緩存的使用。下面的表顯示了可能的值:

選項(xiàng) 描述
0 或 OFF 不要緩存查詢結(jié)果渤涌。
注意:這樣不會(huì)取消分配的查詢緩存區(qū)佩谣。
要想取消,應(yīng)將query_cache_size設(shè)置為0实蓬。
1 或 ON 緩存除了以 SELECT SQL_NO_CACHE 開頭的所有查詢結(jié)果茸俭。
2 或 DEMAND 只緩存以 SELECT SQL_CACHE 開頭的查詢結(jié)果吊履。

查詢緩存狀態(tài)和維護(hù)

可以使用 FLUSH QUERY CACHE 語句來清理查詢緩存碎片以提高內(nèi)存使用性能。該語句不從緩存中移出任何查詢瓣履。RESET QUERY CACHE 語句從查詢緩存中移出所有查詢率翅。FLUSH TABLES 語句也執(zhí)行同樣的工作。

為了監(jiān)視查詢緩存性能袖迎,使用 SHOW STATUS 查看緩存狀態(tài)變量:

SHOW STATUS LIKE 'Qcache%';
變量名 說明
Qcache_free_blocks 36 查詢緩存內(nèi)自由內(nèi)存塊的數(shù)量冕臭。
Qcache_free_memory 138488 用于查詢緩存的自由內(nèi)存的數(shù)量。
Qcache_hits 79570 查詢緩存被訪問的次數(shù)燕锥。
Qcache_inserts 27087 加入到緩存的查詢數(shù)量辜贵。
Qcache_lowmem_prunes 3114 由于內(nèi)存較少?gòu)木彺鎰h除的查詢數(shù)量。
Qcache_not_cached 22989 非緩存查詢數(shù)(不可緩存归形,或由于query_cache_type設(shè)定值未緩存)托慨。
Qcache_queries_in_cache 415 登記到緩存內(nèi)的查詢的數(shù)量。
Qcache_total_blocks 912 查詢緩存內(nèi)的總塊數(shù)暇榴。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厚棵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蔼紧,更是在濱河造成了極大的恐慌婆硬,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸例,死亡現(xiàn)場(chǎng)離奇詭異彬犯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)查吊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門谐区,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉酌,“玉大人凳兵,你說我怎么就攤上這事∷簿兀” “怎么了评也?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵虚茶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我仇参,道長(zhǎng)嘹叫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任诈乒,我火速辦了婚禮罩扇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己喂饥,他們只是感情好消约,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著员帮,像睡著了一般或粮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捞高,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天氯材,我揣著相機(jī)與錄音,去河邊找鬼硝岗。 笑死氢哮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的型檀。 我是一名探鬼主播冗尤,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胀溺!你這毒婦竟也來了裂七?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤仓坞,失蹤者是張志新(化名)和其女友劉穎背零,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扯躺,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蝎困,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了录语。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禾乘,死狀恐怖澎埠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情始藕,我是刑警寧澤蒲稳,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伍派,受9級(jí)特大地震影響江耀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诉植,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一祥国、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦舌稀、人聲如沸啊犬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽觉至。三九已至,卻和暖如春睡腿,著一層夾襖步出監(jiān)牢的瞬間语御,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工嫉到, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沃暗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓何恶,卻偏偏與公主長(zhǎng)得像孽锥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子细层,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354