本篇文章為大家展示了SQL中怎么實(shí)現(xiàn)分庫(kù)分表,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
為文成等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及文成網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都做網(wǎng)站、文成網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!方案1:
通過(guò)提升服務(wù)器硬件能力來(lái)提高數(shù)據(jù)處理能力,比如增加存儲(chǔ)容量、CPU等,這種方案成本很高,并且如果瓶頸在
MySQL本身那么提高硬件也是有很的。
方案2:
把數(shù)據(jù)分散在不同的數(shù)據(jù)庫(kù)中,使得單一數(shù)據(jù)庫(kù)的數(shù)據(jù)量變小來(lái)緩解單一數(shù)據(jù)庫(kù)的性能問(wèn)題,從而達(dá)到提升數(shù)據(jù)庫(kù)性能的目的,如下圖:將電商數(shù)據(jù)庫(kù)拆分為若干獨(dú)立的數(shù)據(jù)庫(kù),并且對(duì)于大表也拆分為若干小表,通過(guò)這種數(shù)據(jù)庫(kù)拆分的方法來(lái)解決數(shù)據(jù)庫(kù)的性能問(wèn)題。
分庫(kù)分表就是為了解決由于數(shù)據(jù)量過(guò)大而導(dǎo)致數(shù)據(jù)庫(kù)性能降低的問(wèn)題,將原來(lái)獨(dú)立的數(shù)據(jù)庫(kù)拆分成若干數(shù)據(jù)庫(kù)組成,將數(shù)據(jù)大表分成若干數(shù)據(jù)表組成,使得單一數(shù)據(jù)庫(kù)、單一數(shù)據(jù)表的數(shù)據(jù)量變小,從而達(dá)到提升數(shù)據(jù)庫(kù)性能的目的。
分庫(kù)分表包括分庫(kù)和分表兩個(gè)部分,在生產(chǎn)中通常包括:垂直分庫(kù)、水平分庫(kù)、垂直分表、水平分表四種方式。
垂直分表
下邊通過(guò)一個(gè)商品查詢(xún)的案例來(lái)垂直分表:
通常在商品列表中是不是顯示商品詳情信息的。
用戶(hù)在瀏覽商品列表時(shí),只有對(duì)某商品感興趣時(shí)才會(huì)查看商品的詳細(xì)描述。因此,商品信息中商品描述字段訪問(wèn)頻次較低,且該字段存儲(chǔ)占用空間較大,訪問(wèn)單個(gè)數(shù)據(jù)IO時(shí)間較長(zhǎng);商品信息中商品名稱(chēng)、商品圖片、商品價(jià)格等其他字段數(shù)據(jù)訪問(wèn)頻次較高。
由于這兩種數(shù)據(jù)的特性不一樣,因此他考慮將商品信息表拆分如下:
將訪問(wèn)頻次低的商品描述信息單獨(dú)存放在一張表中,訪問(wèn)頻次較高的商品基本信息單獨(dú)放在一張表中。
商品列表可采用以下sql:
SELECTp.*,r.[地理區(qū)域名稱(chēng)],s.[店鋪名稱(chēng)],s.[信譽(yù)]FROM[商品信息]p
LEFTJOIN[地理區(qū)域]rONp.[產(chǎn)地]=r.[地理區(qū)域編碼]LEFTJOIN[店鋪信息]sONp.id=s.[所屬店鋪]WHERE...ORDERBY...LIMIT...
需要獲取商品描述時(shí),再通過(guò)以下sql獲?。?/p>
SELECT*
FROM[商品描述]WHERE[商品ID]=?
小明進(jìn)行的這一步優(yōu)化,就叫垂直分表。
垂直分表定義:將一個(gè)表按照字段分成多表,每個(gè)表存儲(chǔ)其中一部分字段。
它帶來(lái)的提升是:
1.為了避免IO爭(zhēng)搶并減少鎖表的幾率,查看詳情的用戶(hù)與商品信息瀏覽互不影響。
2.充分發(fā)揮熱門(mén)數(shù)據(jù)的操作效率,商品信息的操作的高效率不會(huì)被商品描述的低效率所拖累。
注意:
為什么大字段IO效率低:
第一是由于數(shù)據(jù)量本身大,需要更長(zhǎng)的讀取時(shí)間;
第二是跨頁(yè),頁(yè)是數(shù)據(jù)庫(kù)存儲(chǔ)單位,很多查找及定位操作都是以頁(yè)為單位,單頁(yè)內(nèi)的數(shù)據(jù)行越多數(shù)據(jù)庫(kù)整體性能越好,而大字段占用空間大,單頁(yè)內(nèi)存儲(chǔ)行數(shù)少,因此IO效率較低。
第三,數(shù)據(jù)庫(kù)以行為單位將數(shù)據(jù)加載到內(nèi)存中,這樣表中字段長(zhǎng)度較短且訪問(wèn)頻率較高,內(nèi)存能加載更多的數(shù)據(jù),命中率更高,減少來(lái)磁盤(pán)IO,從而提升來(lái)數(shù)據(jù)庫(kù)性能。
一般來(lái)說(shuō),某業(yè)務(wù)實(shí)體中的各個(gè)數(shù)據(jù)項(xiàng)的訪問(wèn)頻次是不一樣的,部分?jǐn)?shù)據(jù)項(xiàng)可能是占用存儲(chǔ)空間比較大的BLOB或是TEXT。例如上例中的商品描述。所以,當(dāng)表數(shù)據(jù)量很大時(shí),可以將表按字段切開(kāi),將熱門(mén)字段、冷門(mén)字段分開(kāi)放置在不同庫(kù)中,這些庫(kù)可以放在不同的存儲(chǔ)設(shè)置上,避免IO爭(zhēng)搶。垂直切分帶來(lái)的性能提升主要集中在熱門(mén)數(shù)據(jù)的操作效率上,而且磁盤(pán)爭(zhēng)用情況減少。
通常我們按以下原則進(jìn)行垂直拆分:
1、把不常用的字段單獨(dú)放在一張表;
2、把text,blob等大字段拆分出來(lái)放在附表中;
3、經(jīng)常組合查詢(xún)的列放在一張表中;
上述內(nèi)容就是SQL中怎么實(shí)現(xiàn)分庫(kù)分表,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享題目:SQL中怎么實(shí)現(xiàn)分庫(kù)分表-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://aaarwkj.com/article10/pjogo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站營(yíng)銷(xiāo)、小程序開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)
猜你還喜歡下面的內(nèi)容