MySQL進(jìn)階實(shí)戰(zhàn)11,查詢緩存-創(chuàng)新互聯(lián)

目錄
    • 一、查詢緩存是什么?
    • 二、MySQL如何判斷緩存命中
    • 三、使用查詢緩存需謹(jǐn)慎
    • 四、如何分析和配置查詢緩存
    • 五、InnoDB和查詢緩存
      • MySQL進(jìn)階實(shí)戰(zhàn)系列文章
      • 哪吒精品系列文章

站在用戶的角度思考問題,與客戶深入溝通,找到嘉祥網(wǎng)站設(shè)計(jì)與嘉祥網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋嘉祥地區(qū)。一、查詢緩存是什么?

MySQL查詢緩存保存查詢返回的完整結(jié)果,當(dāng)查詢命中該緩存,MySQL會(huì)立刻返回結(jié)果,跳過解析、優(yōu)化和執(zhí)行過程。

在這里插入圖片描述
查詢緩存系統(tǒng)會(huì)跟蹤查詢中涉及的每個(gè)表,如果這些表發(fā)生變化,那么和這個(gè)表相關(guān)的所有的緩存數(shù)據(jù)都將失效,這種機(jī)制效率看起來(lái)比較低,因?yàn)閿?shù)據(jù)表變化時(shí)可能對(duì)查詢結(jié)果并沒有影響,但是這種簡(jiǎn)單實(shí)現(xiàn)代價(jià)很小,而這點(diǎn)對(duì)于一個(gè)非常繁忙的系統(tǒng)來(lái)說非常重要。

二、MySQL如何判斷緩存命中

判斷是否命中時(shí),MySQL不會(huì)解析,而是直接使用SQL語(yǔ)句和客戶端發(fā)送過來(lái)的其它原始信息。任何字符上的不同,例如空格、注釋,丟回導(dǎo)致緩存的不命中。通常使用統(tǒng)一的編碼規(guī)則是一個(gè)好的習(xí)慣,會(huì)讓你的系統(tǒng)運(yùn)行的更快。

當(dāng)查詢語(yǔ)句中有一些不確定的數(shù)據(jù)時(shí),不會(huì)被緩存,比如函數(shù)now()。實(shí)際上,如果緩存中包含任何用戶自定義函數(shù)、存儲(chǔ)函數(shù)、用戶變量、臨時(shí)表、MySQL系統(tǒng)表、或者任何包含列級(jí)別權(quán)限的表,都不會(huì)被緩存。

三、使用查詢緩存需謹(jǐn)慎

打開查詢緩存對(duì)讀和寫操作都會(huì)帶來(lái)額外的消耗:

  1. 讀查詢?cè)趫?zhí)行之前要先檢查是否命中緩存;
  2. 如果讀查詢可以被緩存,那么當(dāng)完成執(zhí)行后,MySQL如果發(fā)現(xiàn)緩存中沒有這個(gè)查詢,會(huì)將其結(jié)果存入查詢緩存,這會(huì)帶來(lái)額外的系統(tǒng)消耗;
  3. 對(duì)寫操作也有影響,因?yàn)楫?dāng)向某個(gè)表寫入數(shù)據(jù)的時(shí)候,MySQL必須將對(duì)應(yīng)表的所有緩存設(shè)置失效。如果查詢緩存非常大或者碎片很多,這個(gè)操作就可能會(huì)帶來(lái)很大的系統(tǒng)消耗;

雖然如此,查詢緩存仍然會(huì)給系統(tǒng)帶來(lái)性能的提升。但是,上述的額外消耗也可能不斷增加,再加上對(duì)查詢緩存操作是一個(gè)加鎖排它操作,這個(gè)消耗也不小。

對(duì)InnoDB用戶來(lái)說,事務(wù)的一些特性會(huì)限制查詢緩存的使用。當(dāng)一個(gè)語(yǔ)句在事務(wù)中修改了某個(gè)表,在事務(wù)提交前,MySQL都會(huì)將這個(gè)表對(duì)應(yīng)的查詢緩存設(shè)置失效,因此,長(zhǎng)時(shí)間運(yùn)行的事務(wù),會(huì)大大降低查詢緩存的命中率。

四、如何分析和配置查詢緩存

在這里插入圖片描述

五、InnoDB和查詢緩存

因?yàn)镮nnoDB有自己的MVCC機(jī)制,所以相比其它存儲(chǔ)引擎,InnoDB和查詢緩存的交互要更加復(fù)雜。

MVCC是多版本并發(fā)控制,是為了在讀取數(shù)據(jù)時(shí)不加鎖來(lái)提高讀取效率和并發(fā)性的一種手段。MVCC解決的是讀寫時(shí)的線程安全問題,線程不用去爭(zhēng)搶讀寫鎖。

MVCC所提到的讀是快照讀,也就是普通的select語(yǔ)句,快照讀在讀寫時(shí)不用加鎖,不過可能會(huì)讀到歷史數(shù)據(jù)。

另一種讀的方式是當(dāng)前讀,是一種悲觀鎖的操作,它會(huì)對(duì)當(dāng)前讀取的數(shù)據(jù)進(jìn)行加鎖,所以讀到的數(shù)據(jù)都是最新的,主要包括以下操作:

  1. select lock in share mode,共享鎖
  2. select for update,排它鎖
  3. insert,排它鎖
  4. update,排它鎖
  5. delete,排它鎖

InnoDB會(huì)控制在一個(gè)事務(wù)中是否可以使用查詢緩存,InnoDB會(huì)同時(shí)控制對(duì)查詢緩存的讀寫操作。事務(wù)是否可以訪問查詢緩存取決于當(dāng)前事務(wù)的ID,以及對(duì)應(yīng)的數(shù)據(jù)表上是否有鎖。每一個(gè)InnoDB表的內(nèi)存數(shù)據(jù)字典都保存了一個(gè)事務(wù)ID號(hào),如果當(dāng)前事務(wù)ID小于該事務(wù)ID,則無(wú)法訪問查詢緩存。

如果表上有任何的鎖,那么對(duì)這個(gè)表的任何查詢語(yǔ)句都是無(wú)法被緩存的。例如,某個(gè)事務(wù)執(zhí)行了select for update語(yǔ)句,那么在這個(gè)鎖釋放之前,任何其它的事務(wù)都無(wú)法從查詢緩存中讀取與這個(gè)表相關(guān)的緩存結(jié)果。

當(dāng)事務(wù)提交時(shí),InnoDB持有鎖,并使用當(dāng)前的一個(gè)系統(tǒng)事務(wù)ID更新當(dāng)前表的計(jì)數(shù)器。InnoDB將每個(gè)表的計(jì)數(shù)器設(shè)置成某個(gè)事務(wù)ID,而這個(gè)事務(wù)ID就代表了當(dāng)前存在的且修改了該表的大的事務(wù)ID。

MySQL進(jìn)階實(shí)戰(zhàn)系列文章

MySQL進(jìn)階實(shí)戰(zhàn)1,數(shù)據(jù)類型與三范式

MySQL進(jìn)階實(shí)戰(zhàn)2,那些年學(xué)過的事務(wù)

MySQL進(jìn)階實(shí)戰(zhàn)3,mysql索引詳解,上篇

MySQL進(jìn)階實(shí)戰(zhàn)4,那些年學(xué)過的索引,下篇

MySQL進(jìn)階實(shí)戰(zhàn)5,為什么查詢速度會(huì)慢

MySQL進(jìn)階實(shí)戰(zhàn)6,緩存表、視圖、計(jì)數(shù)器表

MySQL進(jìn)階實(shí)戰(zhàn)7,查詢的執(zhí)行過程

MySQL進(jìn)階實(shí)戰(zhàn)8,分區(qū)表詳解

MySQL進(jìn)階實(shí)戰(zhàn)9,InnoDB和MyISAM的數(shù)據(jù)分布對(duì)比

MySQL進(jìn)階實(shí)戰(zhàn)10,MySQL全文索引

SQL性能優(yōu)化的21個(gè)小技巧

mysql索引詳解

MySql基礎(chǔ)知識(shí)總結(jié)(SQL優(yōu)化篇)

哪吒精品系列文章

Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師

10萬(wàn)字208道Java經(jīng)典面試題總結(jié)(附答案)

Java基礎(chǔ)教程系列
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章標(biāo)題:MySQL進(jìn)階實(shí)戰(zhàn)11,查詢緩存-創(chuàng)新互聯(lián)
本文鏈接:http://muchs.cn/article30/dppiso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、動(dòng)態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化商城網(wǎng)站、域名注冊(cè)服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)