<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Mysql表有近千萬(wàn)數(shù)據(jù),CRUD如何優(yōu)化?

          共 1621字,需瀏覽 4分鐘

           ·

          2020-12-25 10:57

          點(diǎn)擊上方"Java后端編程",?右上角選擇“設(shè)為星標(biāo)”

          精品技術(shù)文章準(zhǔn)時(shí)送上!


          MySQL 數(shù)據(jù)庫(kù)某張表近千萬(wàn)的數(shù)據(jù),CRUD比較慢,如何優(yōu)化?

          說(shuō)實(shí)話,這個(gè)數(shù)據(jù)量級(jí), MySQL 單庫(kù)單表支撐起來(lái)完全沒(méi)有問(wèn)題的,所以首先還是考慮數(shù)據(jù)庫(kù)本身的優(yōu)化。

          從上圖可以看到,數(shù)據(jù)庫(kù)優(yōu)化通??梢酝ㄟ^(guò)以上幾點(diǎn)來(lái)實(shí)現(xiàn):

          • 硬件升級(jí):也就是花更多的錢(qián),升級(jí)我們數(shù)據(jù)庫(kù)硬件配置,包括 CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)等等,但是這個(gè)方案成本高,而且不一定能起到非常好的效果。

          • 數(shù)據(jù)庫(kù)配置:修改數(shù)據(jù)庫(kù)的配置,有可能讓我們的 CRUD 操作變得更快,不過(guò)我也不建議大家把經(jīng)歷放在這一點(diǎn)上面;首先,數(shù)據(jù)庫(kù)的配置通常由專(zhuān)業(yè)的 DBA 來(lái)負(fù)責(zé);第二,大部分時(shí)候,默認(rèn)的數(shù)據(jù)庫(kù)配置在大多數(shù)情況下已經(jīng)是最優(yōu)配置了。

          對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),我們需要把注意力放在后面三點(diǎn):

          數(shù)據(jù)結(jié)構(gòu)的優(yōu)化,也就是表結(jié)構(gòu)的優(yōu)化

          • 數(shù)據(jù)類(lèi)型的選擇:選用合適的數(shù)據(jù)結(jié)構(gòu)。什么叫做"合適的數(shù)據(jù)結(jié)構(gòu)",比如性別字段,M表示男F表示女,那么一個(gè) char(1) 就足夠了,如果存儲(chǔ)人的年齡,那么就沒(méi)有必要使用 INT 這么大范圍的字段了;

          • 適當(dāng)?shù)牟鸱郑呵f(wàn)不要試圖把所有的字段放在一張表中,因?yàn)檫@會(huì)非常影響性能,通常一張表的字段最好不要超過(guò) 30 個(gè);

          • 適當(dāng)?shù)娜哂啵喝绻恍┏S玫淖侄危赡軙?huì)用在不同的維度,那么我們可以把這些字段設(shè)計(jì)在多張表中,因?yàn)檫@樣可能會(huì)減少表關(guān)聯(lián);

          • 字段盡量設(shè)置成 not Null,盡量帶有默認(rèn)值。

          SQL 語(yǔ)句的優(yōu)化

          優(yōu)化 SQL 語(yǔ)句執(zhí)行速度的方法有很多,比如:

          • 盡量使用索引,盡量避免全表掃描,提高查詢(xún)速度;

          • 當(dāng)然你不能無(wú)限制地建立索引;維護(hù)索引也會(huì)影響性能,會(huì)降低 DML 操作的速度;

          • 注意 SQL 語(yǔ)句的書(shū)寫(xiě),有一些錯(cuò)誤的寫(xiě)法可能會(huì)導(dǎo)致索引失效;

          • 盡量避免在 where 子句中對(duì)字段進(jìn)行 Null 值判斷(當(dāng)然我們?cè)诒碓O(shè)計(jì)中,直接建議不要有 Null);

          • 條件值多的情況下,盡量不要使用 in 和 not in ;

          • select 的時(shí)候,使用具體的字段代替 * 號(hào)

          • 避免返回大量數(shù)據(jù),增加分頁(yè);

          減少數(shù)據(jù)庫(kù)的訪問(wèn)

          • 我們可以通過(guò)增加本地緩存或分布式緩存的方式,將熱點(diǎn)數(shù)據(jù)存儲(chǔ)到緩存中,以減少數(shù)據(jù)庫(kù)的訪問(wèn);

          • 終極大招,如果是一個(gè)不合理的需求,我們可以拒絕做這個(gè)需求,這樣也算是"減少了數(shù)據(jù)庫(kù)訪問(wèn)"。

          說(shuō)完了 MySQL 本身的優(yōu)化,如果數(shù)據(jù)量進(jìn)一步增大的話,我們還有什么優(yōu)化的方案呢?

          讀寫(xiě)分離

          主庫(kù)用于寫(xiě),從庫(kù)用于讀,將讀寫(xiě)分散在不同的數(shù)據(jù)庫(kù)上,利用多臺(tái)機(jī)器的資源,來(lái)提高數(shù)據(jù)庫(kù)的可用性和性能。

          分庫(kù)分表

          如果數(shù)據(jù)持續(xù)增多,超過(guò)了單臺(tái) MySQL 的支撐上限,那么只能用【分庫(kù)分表】這一招了;我們可以采用一定的路由規(guī)則,將數(shù)據(jù)保存到不同的數(shù)據(jù)庫(kù)中。

          當(dāng)然,如果不是“迫不得已”,我是不太建議分庫(kù)分表的,因?yàn)檫@樣極大地增加了系統(tǒng)的復(fù)雜程度,并且會(huì)帶來(lái)更多的問(wèn)題需要開(kāi)發(fā)人員解決。

          以上就是常用的 MySQL 優(yōu)化方案,如果是千萬(wàn)級(jí)數(shù)據(jù)量,優(yōu)化 MySQL 本身即可。

          —————END—————


          推薦閱讀:



          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?666?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          明天見(jiàn)(??ω??)??
          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色视频在线观看大全 | 免费免草视频在线播放 | 日本a在线免费电影 | gogo高清无码视频 | 国产裸体视频网站女69 |