溫馨提示×

溫馨提示×

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

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

SQL中怎么實(shí)現(xiàn)分庫分表

發(fā)布時間:2021-08-06 10:55:07 來源:億速云 閱讀:179 作者:Leah 欄目:數(shù)據(jù)庫

本篇文章為大家展示了SQL中怎么實(shí)現(xiàn)分庫分表,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

SQL怎樣進(jìn)行分庫分表

  方案1:

  通過提升服務(wù)器硬件能力來提高數(shù)據(jù)處理能力,比如增加存儲容量、CPU等,這種方案成本很高,并且如果瓶頸在

  MySQL本身那么提高硬件也是有很的。

  方案2:

  把數(shù)據(jù)分散在不同的數(shù)據(jù)庫中,使得單一數(shù)據(jù)庫的數(shù)據(jù)量變小來緩解單一數(shù)據(jù)庫的性能問題,從而達(dá)到提升數(shù)據(jù)庫性能的目的,如下圖:將電商數(shù)據(jù)庫拆分為若干獨(dú)立的數(shù)據(jù)庫,并且對于大表也拆分為若干小表,通過這種數(shù)據(jù)庫拆分的方法來解決數(shù)據(jù)庫的性能問題。

  分庫分表就是為了解決由于數(shù)據(jù)量過大而導(dǎo)致數(shù)據(jù)庫性能降低的問題,將原來獨(dú)立的數(shù)據(jù)庫拆分成若干數(shù)據(jù)庫組成,將數(shù)據(jù)大表分成若干數(shù)據(jù)表組成,使得單一數(shù)據(jù)庫、單一數(shù)據(jù)表的數(shù)據(jù)量變小,從而達(dá)到提升數(shù)據(jù)庫性能的目的。

分庫分表的方式

  分庫分表包括分庫和分表兩個部分,在生產(chǎn)中通常包括:垂直分庫、水平分庫、垂直分表、水平分表四種方式。

  垂直分表

  下邊通過一個商品查詢的案例來垂直分表:

  通常在商品列表中是不是顯示商品詳情信息的。

  用戶在瀏覽商品列表時,只有對某商品感興趣時才會查看商品的詳細(xì)描述。因此,商品信息中商品描述字段訪問頻次較低,且該字段存儲占用空間較大,訪問單個數(shù)據(jù)IO時間較長;商品信息中商品名稱、商品圖片、商品價格等其他字段數(shù)據(jù)訪問頻次較高。

  由于這兩種數(shù)據(jù)的特性不一樣,因此他考慮將商品信息表拆分如下:

  將訪問頻次低的商品描述信息單獨(dú)存放在一張表中,訪問頻次較高的商品基本信息單獨(dú)放在一張表中。

  商品列表可采用以下sql:

  SELECTp.*,r.[地理區(qū)域名稱],s.[店鋪名稱],s.[信譽(yù)]FROM[商品信息]p

  LEFTJOIN[地理區(qū)域]rONp.[產(chǎn)地]=r.[地理區(qū)域編碼]LEFTJOIN[店鋪信息]sONp.id=s.[所屬店鋪]WHERE...ORDERBY...LIMIT...

  需要獲取商品描述時,再通過以下sql獲?。?/p>

  SELECT*

  FROM[商品描述]WHERE[商品ID]=?

  小明進(jìn)行的這一步優(yōu)化,就叫垂直分表。

  垂直分表定義:將一個表按照字段分成多表,每個表存儲其中一部分字段。

  它帶來的提升是:

  1.為了避免IO爭搶并減少鎖表的幾率,查看詳情的用戶與商品信息瀏覽互不影響。

  2.充分發(fā)揮熱門數(shù)據(jù)的操作效率,商品信息的操作的高效率不會被商品描述的低效率所拖累。

  注意:

  為什么大字段IO效率低:

  第一是由于數(shù)據(jù)量本身大,需要更長的讀取時間;

  第二是跨頁,頁是數(shù)據(jù)庫存儲單位,很多查找及定位操作都是以頁為單位,單頁內(nèi)的數(shù)據(jù)行越多數(shù)據(jù)庫整體性能越好,而大字段占用空間大,單頁內(nèi)存儲行數(shù)少,因此IO效率較低。

  第三,數(shù)據(jù)庫以行為單位將數(shù)據(jù)加載到內(nèi)存中,這樣表中字段長度較短且訪問頻率較高,內(nèi)存能加載更多的數(shù)據(jù),命中率更高,減少來磁盤IO,從而提升來數(shù)據(jù)庫性能。

  一般來說,某業(yè)務(wù)實(shí)體中的各個數(shù)據(jù)項(xiàng)的訪問頻次是不一樣的,部分?jǐn)?shù)據(jù)項(xiàng)可能是占用存儲空間比較大的BLOB或是TEXT。例如上例中的商品描述。所以,當(dāng)表數(shù)據(jù)量很大時,可以將表按字段切開,將熱門字段、冷門字段分開放置在不同庫中,這些庫可以放在不同的存儲設(shè)置上,避免IO爭搶。垂直切分帶來的性能提升主要集中在熱門數(shù)據(jù)的操作效率上,而且磁盤爭用情況減少。

  通常我們按以下原則進(jìn)行垂直拆分:

  1、把不常用的字段單獨(dú)放在一張表;

  2、把text,blob等大字段拆分出來放在附表中;

  3、經(jīng)常組合查詢的列放在一張表中;

上述內(nèi)容就是SQL中怎么實(shí)現(xiàn)分庫分表,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

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

sql
AI