溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫緩存有哪些應(yīng)用環(huán)境

發(fā)布時間:2021-08-11 13:58:18 來源:億速云 閱讀:209 作者:Leah 欄目:數(shù)據(jù)庫

這篇文章給大家介紹MySQL數(shù)據(jù)庫緩存有哪些應(yīng)用環(huán)境,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

  MySQL數(shù)據(jù)庫緩存應(yīng)用環(huán)境有哪些

  并不是在任何情況下數(shù)據(jù)緩存都能夠起到應(yīng)有的效果。如果企業(yè)有一個不經(jīng)常改變的表并且服務(wù)器受到這個表的大量的相同查詢時,數(shù)據(jù)緩存才能夠起到不錯的效果。通常情況下,針對Web的應(yīng)用,效果會比較明顯。如現(xiàn)在在數(shù)據(jù)庫中有一張產(chǎn)品信息表。企業(yè)的用戶需要通過網(wǎng)頁來查詢產(chǎn)品的信息。如果在系統(tǒng)設(shè)計時,默認查詢的結(jié)果是顯示日前一個月交易過的產(chǎn)品信息。那么每次用戶按默認情況查詢產(chǎn)品信息時,將都會從緩存中獲取信息(如果相關(guān)的信息沒有被更新過)。此時系統(tǒng)查詢的速度就會比較快。

  數(shù)據(jù)緩存使用的限制

  并不是在任何情況下,數(shù)據(jù)緩存都會起到改善查詢的效果。根據(jù)筆者的項目經(jīng)驗,認為在一下幾種情況,數(shù)據(jù)緩存機制的效果并不會很大。

  一是查詢所涉及到的表會經(jīng)常更改。如在一個進銷存管理系統(tǒng)中,可能會有產(chǎn)品與銷售記錄兩張表格。產(chǎn)品表一般不怎么會更新,而銷售記錄表就可能每分鐘都會發(fā)生變化。此時對于銷售記錄表來說,采用緩存機制就不會起到多大的效果。因為根據(jù)緩存的工作原理,當某個表被更改后,其對應(yīng)的數(shù)據(jù)緩存的相關(guān)條目就會被清空。

  二是查詢緩存不使用與服務(wù)器方便些的語句。根據(jù)B/S或者C/S架構(gòu),可以將相關(guān)應(yīng)用分為服務(wù)器斷和客戶端兩類。在使用數(shù)據(jù)緩存時,數(shù)據(jù)庫管理員要考慮到,在MySQL數(shù)據(jù)庫中,查詢緩存并不適用于服務(wù)器方所編寫的查詢語句。當數(shù)據(jù)庫管理員正在使用服務(wù)器方編寫的語句時,要注意到這些語句并不會應(yīng)用緩存技術(shù)。

  三是查詢時使用緩存的兩個基本條件:所采用的查詢語句完全一樣以及相關(guān)數(shù)據(jù)表妹歐發(fā)生更改。對于后面一條,上面已經(jīng)談到過。這里筆者要說的是,什么叫做查詢語句瓦圈一樣簡單的說,就是前后使用的兩條查詢語句(不一定要連在一起)完全一致。不僅包括查詢的字段,也包括查詢的條件。在這里要認識到一個誤區(qū)。如果在5分鐘之前用戶查詢一個產(chǎn)品信息表,其沒有用到任何查詢條件,查詢?nèi)康漠a(chǎn)品信息記錄。5分鐘之后又有一個用戶查詢產(chǎn)品信息表,此時其使用了查詢條件,如只查詢?nèi)涨耙粋€月新建的產(chǎn)品信息。顯然此時后面一個查詢的結(jié)果是前面一個查詢結(jié)果的子集(不考慮產(chǎn)品基本表在這個時間間隔中是否做了更改)。照理來說應(yīng)該可以使用數(shù)據(jù)緩存。但是這里需要注意,此時前后兩條查詢語句,其是不相同的(其查詢條件不同)。即使結(jié)果是相同的,或者具有包含關(guān)系,數(shù)據(jù)庫仍然會先重新解析SQL語句,然后從硬盤上的數(shù)據(jù)文件中去獲取數(shù)據(jù)。

  另外需要注意的是如果用戶在查詢語句中,使用了自定義函數(shù)、自定義變量或者因引用了系統(tǒng)數(shù)據(jù)庫中的表,那么緩存機制也會失效。

  MySQL數(shù)據(jù)庫緩存怎樣提高效果

  通過數(shù)據(jù)庫的合理設(shè)計,可以提高緩存的使用效果,擴大緩存的使用領(lǐng)域。具體的說,數(shù)據(jù)庫管理員可以從如下幾個方面出發(fā)。

  1、根據(jù)數(shù)據(jù)變化的頻率來分解表

  如現(xiàn)在有產(chǎn)品基本資料與產(chǎn)品最新庫存兩部分內(nèi)容。在不考慮緩存的情況下,可以將產(chǎn)品基本資料與產(chǎn)品庫存放在同一個表中,然后通過其他作業(yè)來更新這個庫存數(shù)量。如此的話,在前臺界面中,就可以直觀的反映出產(chǎn)品的庫存數(shù)量。但是從緩存的設(shè)計角度來看,這么操作并不是很合理。因為產(chǎn)品信息相對來說不怎么會變化,而庫存數(shù)量卻經(jīng)常在發(fā)生變化。如果將他們放在同一張表上,由于庫存數(shù)量的不斷更新,數(shù)據(jù)緩存中的內(nèi)容就會不斷被清空(與產(chǎn)品信息表相關(guān)的數(shù)據(jù)緩存)。此時如果很多用戶要查詢產(chǎn)品的描述、規(guī)格(他們可能并不關(guān)注產(chǎn)品的庫存),那么他們就無法使用數(shù)據(jù)緩存。因為緩存中沒有相關(guān)的數(shù)據(jù)(由于庫存數(shù)量不斷變化而被清空)。

  遇到這種情況時,數(shù)據(jù)庫管理員就可以將庫存數(shù)量與產(chǎn)品基本信息存放在兩張不同的表上,然后通過關(guān)鍵字來進行關(guān)聯(lián)。這么做的好處就是庫存數(shù)量更新并不會影響到產(chǎn)品基本信息表所對應(yīng)的數(shù)據(jù)緩存(他們是兩張表)。從而提高產(chǎn)品信息查詢時的緩存命中率。

  2、采用默認條件的查詢來提高緩存命中率

  在上面的分析中筆者談到,要兩條完全相同的SQL語句才能夠使用緩存。條件不同或者使用的字段不同,數(shù)據(jù)庫系統(tǒng)都不會使用緩存來進行查詢優(yōu)化。另外MySQL數(shù)據(jù)庫與其他數(shù)據(jù)庫不一樣,對于SQL語句解析來說,其大小寫實敏感的。也就是說同一條查詢語句,如果其關(guān)鍵字的大小寫不同,那么也會被認為是用了不同的SQL語句。這一點是比較讓人頭疼的。針對這種情況,在客戶端應(yīng)用程序設(shè)計時,最好注意以下幾點。

  一是要習(xí)慣采用默認條件的查詢來提高緩存命中率。如在設(shè)計產(chǎn)品信息查詢這個功能,可以考慮默認查詢?nèi)啃畔⒒蛘咧付硞€固定的條件。如此就可以提高緩存的命中率。而不要在不同的用戶界面設(shè)置不同的默認值。某些應(yīng)用系統(tǒng),為了提高界面的友好性,會給用戶提供一些個性化設(shè)置的參數(shù),以保存用戶的個性化內(nèi)容。此時雖然可以提高界面的人性化,但是顯然會降低數(shù)據(jù)緩存的命中率。遇到這種情況時,數(shù)據(jù)庫管理員就需要在人性化設(shè)計與系統(tǒng)的查詢性能之間進行均衡。

  不同的應(yīng)用針對同一個表格的相同查詢,其查詢語句最好相同。如現(xiàn)在對于產(chǎn)品信息,即可以通過產(chǎn)品信息窗口進行查詢,也可以根據(jù)報表來查詢。此時其對應(yīng)的后臺表格是相同的。只要其執(zhí)行的查詢語句相同、并且在這段時間之內(nèi)數(shù)據(jù)庫表格沒有發(fā)生變化,那么系統(tǒng)就可以從緩存中獲取數(shù)據(jù)。在實際工作中,窗體與報表往往是有不同的人設(shè)計與開發(fā)的。如果現(xiàn)在這兩個人SQL語句的書寫習(xí)慣不同,一個人喜歡用大寫,而另外一個人喜歡用小寫。在系統(tǒng)中,對于SQL查詢語句解析時區(qū)分大小寫。如果大小寫不同,則會被認為不同的SQL語句,此時系統(tǒng)也就無法使用緩存了。為此在遇到這種情況時,不同的用戶之間要統(tǒng)一SQL語句的書寫規(guī)范,如要么全部使用大寫,要么全部使用小寫。項目管理員要根據(jù)實際情況來制定相關(guān)的規(guī)則。

  3、提高緩存空間大小來提高數(shù)據(jù)庫的緩存命中率

  當數(shù)據(jù)緩存滿時,新的數(shù)據(jù)會覆蓋舊的數(shù)據(jù)。如現(xiàn)在用戶查詢了一筆產(chǎn)品信息。1個小時后其在利用相同的語句查詢了這個產(chǎn)品信息(假設(shè)在這個過程中產(chǎn)品信息表沒有發(fā)生變化)。查詢語句是否會采用緩存呢答案是不一定。如果企業(yè)服務(wù)器的緩存空間足夠的大,舊的緩存信息沒有被新的查詢內(nèi)容所覆蓋,那么就會采用緩存中的信息。相反,如果緩存比較小,此時系統(tǒng)舊的緩存信息就會被新的查詢內(nèi)容所覆蓋掉。在這種情況下,即使查詢的語句相同、表格也沒有發(fā)生變化,數(shù)據(jù)庫系統(tǒng)仍然要從硬盤上的數(shù)據(jù)文件中去獲取數(shù)據(jù)。

  為此為了提高查詢的效率,提高緩存的命中率,最好能夠增加服務(wù)器上緩存的空間?,F(xiàn)在內(nèi)存價格比較便宜,這筆投資應(yīng)該不會太大。特別是當在一臺服務(wù)器上實現(xiàn)不同的應(yīng)用時,提高內(nèi)存的容量還是蠻有必要的。

關(guān)于MySQL數(shù)據(jù)庫緩存有哪些應(yīng)用環(huán)境就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI