国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 性能優(yōu)化,讓數(shù)據(jù)庫跑的更快

瀏覽:47日期:2023-10-16 18:36:57

MySQL 性能優(yōu)化,讓數(shù)據(jù)庫跑的更快

在數(shù)據(jù)庫優(yōu)化工作中,使數(shù)據(jù)盡可能的小,使表在硬盤上占據(jù)的空間盡可能的小,這是最常用、也是最有效的手段之一。因?yàn)榭s小數(shù)據(jù),相對來說可以提高硬盤的讀寫速度,并且在查詢過程中小表的內(nèi)容處理時(shí)所占用的系統(tǒng)資源比較少。同理,如果在比較小的列上設(shè)置索引的話,其索引所占用的資源也會比較少。那么數(shù)據(jù)庫管理員該如何給自己的數(shù)據(jù)減肥呢?對此筆者有如下幾個(gè)建議。

建議一:空值并不一定不占用空間

在這里筆者先給大家掃盲一下。有些數(shù)據(jù)庫管理員,認(rèn)為空值不會占用系統(tǒng)資源,其實(shí)這是一個(gè)錯(cuò)誤的認(rèn)識。他們在數(shù)據(jù)庫設(shè)計(jì)時(shí),不喜歡將字段的屬性設(shè)置為NOT NULL。而讓用戶根據(jù)自己的需要來輸入數(shù)據(jù)。筆者認(rèn)為,這種做法對于數(shù)據(jù)庫的性能是不利的。

筆者的意見是,如果有可能的話,盡量將列設(shè)置為NOT NULL,即不允許有空值。這么做的話,可以加快后續(xù)處理的速度,同時(shí)從數(shù)據(jù)存儲來看還可以使得每列節(jié)省一位,從而達(dá)到數(shù)據(jù)減肥的目的。在實(shí)際工作中,如果有些情況不需要用戶輸入數(shù)據(jù)時(shí),還可以通過默認(rèn)字段來達(dá)到非空的目的。如在薪資系統(tǒng)中,可以將用戶的工作年限默認(rèn)設(shè)置為0,而不是空白。當(dāng)然,如果確實(shí)需要NULL的話,也沒有辦法。但是作為數(shù)據(jù)庫工程師來說,要盡量避免使用NULL值。

建議二:使用盡量小的數(shù)據(jù)類型

數(shù)據(jù)類型的大小也會影響到基礎(chǔ)表的大小。如對于MEDIUMINT和INT兩個(gè)數(shù)據(jù)類型,其都可以用來保存整數(shù)型的數(shù)據(jù),只是其能夠保存的精度不同而已。但是從存儲數(shù)據(jù)的角度來看,前者所需要的存儲空間要比后者節(jié)省25%左右。為此在能夠使用MEDIUMINT的情況下,就不要使用INT。

另外在定義數(shù)據(jù)長度的時(shí)候,在滿足需求的情況下,也要盡量的短。如現(xiàn)在薪資考核系統(tǒng)中有員工編碼一個(gè)字段。如果企業(yè)員工編碼已經(jīng)確定,有五位字符構(gòu)成。那么在定義字段時(shí),只需要定義5個(gè)字符的長度。這不僅可以縮小存儲空間,而且還可以起到一定的數(shù)據(jù)校對功能。當(dāng)用戶輸入的編碼長度超過5位時(shí),數(shù)據(jù)將無法保存。

雖然說保存某個(gè)數(shù)據(jù)可以有很多數(shù)據(jù)類型可以選擇,也可以定義比較大的字符位數(shù)。但是選擇盡量小的數(shù)據(jù)類型,可以幫助降低數(shù)據(jù)存儲空間,達(dá)到數(shù)據(jù)減肥的目的。從而進(jìn)一步提升數(shù)據(jù)庫的性能。

建議三:索引與數(shù)據(jù)表大小的關(guān)系

筆者在文章一開頭就談到過,如果對于比較小的列設(shè)置索引,那么索引也將占用比較少的資源。可見,索引與數(shù)據(jù)表大小也有緊密的聯(lián)系。在合適的地方、合適的時(shí)機(jī)設(shè)置合適的索引,也可以實(shí)現(xiàn)對數(shù)據(jù)減肥的目的。

如通常情況下,每張數(shù)據(jù)表可能會有多個(gè)索引,但是主索引往往只有一個(gè)。為此對于每張表的主索引應(yīng)該考慮盡量的短小精悍。這可以幫助數(shù)據(jù)庫更快的進(jìn)行識別。

再如盡量對前綴進(jìn)行索引。如現(xiàn)在有一張表,需要對某個(gè)列設(shè)置索引。而這個(gè)列有一個(gè)特點(diǎn),即在頭幾個(gè)字符上有唯一的前綴。如果存在這種情況的話,那么緊緊索引這個(gè)前綴,而不是全部,效果會更好。在MySQL數(shù)據(jù)庫中,支持對一個(gè)字符列的最左邊部分創(chuàng)建一個(gè)索引。這也就是說,數(shù)據(jù)庫會將某個(gè)字段根據(jù)一定的規(guī)則拆分為前后兩個(gè)部分。拆分后前面一部分的數(shù)據(jù)如果能夠保持唯一,那么就只需要對前面一部分設(shè)置索引即可,而不需要對整個(gè)字段的數(shù)據(jù)設(shè)置索引。這無疑可以縮小索引所占用的資源,實(shí)現(xiàn)減肥的目的。更短的索引,能夠提供更快的查詢速度。因?yàn)樗鼈兯加玫挠脖P空間更少,而且他們將在索引緩存中保存更多的訪問。從而降低硬盤的搜索次數(shù),提高查詢的效率。

最后需要注意的就是,索引不能夠?yàn)E用。使用索引確實(shí)可以提高數(shù)據(jù)的處理能力,但是索引同時(shí)也會帶來額外的開銷。只有這個(gè)收益大于開銷時(shí),使用索引才能夠提升數(shù)據(jù)庫的性能。否則的話,則會起到相反的效果。如某個(gè)表需要進(jìn)行快速的存儲,如果在這個(gè)表上設(shè)置過多的索引,索引就會起到副作用。對此筆者建議,如果主要通過搜索列的組合來存取一個(gè)表,那么最好對他們只設(shè)置一個(gè)索引。當(dāng)然,這個(gè)索引部分應(yīng)該是日常工作中最常用的列。在不得已的情況下,如果需要使用多個(gè)索引的話,那么最好能夠以更多的副本使用列來獲得更好的索引壓縮。從而降低因?yàn)槭褂昧硕鄠€(gè)索引而增加的資源消耗。

建議四:在需要“豐滿”的地方還是不能夠節(jié)省

一個(gè)女人,該瘦的地方要瘦,該豐滿的地方要豐滿。其實(shí)數(shù)據(jù)庫也是如此。能夠節(jié)省硬盤空間的地方,就要節(jié)省。而不能夠節(jié)省的地方,則不能夠?yàn)榱藴p肥而將其精簡下來。有時(shí)候這會起到適得其反的效果。

筆者以Varchar為例。如在MyISAM標(biāo)中,如果沒有任何可變長的列,那么最好使用固定大小的數(shù)據(jù)類型。雖然采用固定長度的數(shù)據(jù)類型,往往會浪費(fèi)一定的存儲空間。因?yàn)槿绻脩糨斎氲臄?shù)據(jù)不足,采用固定長度的話,數(shù)據(jù)存儲時(shí)仍然會按這個(gè)固定的長度來存儲。但是在這種情況下,能夠用固定長度的,還是要使用固定長度。因?yàn)檫@種情況下雖然會浪費(fèi)一定的硬盤空間,但是卻可以提高數(shù)據(jù)的查詢速度。

可見,并不是在任何情況下對數(shù)據(jù)減肥都可以提高數(shù)據(jù)庫的性能。這就好像節(jié)支開源,這個(gè)節(jié)省要節(jié)省在刀刃上。否則的話,不但不能夠節(jié)支,而且還會搬起石頭砸自己的腳。通俗的說,就是該瘦的地方要瘦,該豐滿的地方要豐滿。記住這句話,就對了。

建議五:將表分割以實(shí)現(xiàn)減肥的目的

螞蟻在搬食物時(shí),如果某塊食物過大,無法搬動的話,螞蟻則可能會將這個(gè)塊食物進(jìn)行分割,直到其搬得動為止。這就是分蛋糕原理。其實(shí)這種現(xiàn)象在日常工作中經(jīng)常常見。如我們有一張數(shù)據(jù)庫表格,如果里面的紀(jì)錄非常多,那么表格的允許速度會非常的慢。在這種情況下,可以根據(jù)一定的規(guī)則將表分為多個(gè)工作簿。如現(xiàn)在有一份企業(yè)員工的考勤信息。對這個(gè)表進(jìn)行查詢、排序、統(tǒng)計(jì)時(shí),等待時(shí)間非常的長。此時(shí)就可以根據(jù)部門將其分割成不同的工作簿,然后再對其進(jìn)行相關(guān)的數(shù)據(jù)分析。此時(shí)雖然工作量會大一點(diǎn),但是其處理的速度會變快許多。

根據(jù)這個(gè)原理,在數(shù)據(jù)庫優(yōu)化時(shí),可以將一個(gè)經(jīng)常被掃描的大表分割為2個(gè)或者2個(gè)以上的表示非常有益的。如在日常工作中,筆者現(xiàn)在有一個(gè)動態(tài)格式的數(shù)據(jù)表,并且這個(gè)數(shù)據(jù)是使用一個(gè)掃描表時(shí),就會用這個(gè)來找出相關(guān)行的比較小的靜態(tài)格式的表。

通過這個(gè)表的拆分,可以將一塊大蛋糕分為幾塊小的蛋糕,以利于后續(xù)數(shù)據(jù)的統(tǒng)計(jì)與分析。當(dāng)然這個(gè)效果的好壞,直接跟這個(gè)拆分的規(guī)則有關(guān)。關(guān)于表如何拆分才能夠達(dá)到理想的效果,這又是一個(gè)比較大的話題。由于這里篇幅有限,筆者不做過多的說明。或許在后續(xù)的文章中,筆者會以這命題進(jìn)行展開,給大家做詳細(xì)的說明。

標(biāo)簽: MySQL 數(shù)據(jù)庫
主站蜘蛛池模板: 久爱午夜精品免费视频 | 久一在线 | 久操福利视频 | 久久看精品| 成年日韩片av在线网站 | 日韩欧美一区二区三区不卡视频 | 九九在线精品 | 亚洲一级香蕉视频 | 九九视频精品在线 | 日本a级毛片视频播放 | 欧美在线视频不卡 | 欧美毛片aaa激情 | 大陆孕妇孕交视频自拍 | a一级爱做片免费 | 国产精品无码久久久久 | 亚洲国产成人久久笫一页 | 久久semm亚洲国产 | 97在线观看完整免费 | 日本一区二区三区四区公司 | 日韩中文字幕在线免费观看 | 亚洲视频天堂 | 女人精aaaa片一级毛片女女 | 99re最新这里只有精品 | 亚洲视频二 | 国产精品久久久久久久久岛 | 久久久久爽亚洲精品 | 女人张开腿给男人捅 | 国产亚洲精品精品国产亚洲综合 | 国内一区| 亚洲综合首页 | 精品久久久日韩精品成人 | 欧美激情成人网 | 毛片在线免费视频 | 天天看片天天爽_免费播放 天天看夜夜 | 国产四区 | 亚洲一区免费看 | 精品国产日韩久久亚洲 | 亚洲国产一区二区三区最新 | 综合国产| 日韩精品亚洲一级在线观看 | 网红主播大尺度精品福利视频 |