paulwong

          mysql分表,分區(qū)的區(qū)別和聯(lián)系

          一,什么是mysql分表,分區(qū)

          什么是分表,從表面意思上看呢,就是把一張表分成N多個(gè)小表,具體請(qǐng)看mysql分表的3種方法

          什么是分區(qū),分區(qū)呢就是把一張表的數(shù)據(jù)分成N多個(gè)區(qū)塊,這些區(qū)塊可以在同一個(gè)磁盤(pán)上,也可以在不同的磁盤(pán)上,具體請(qǐng)參考mysql分區(qū)功能詳細(xì)介紹,以及實(shí)例

          二,mysql分表和分區(qū)有什么區(qū)別呢

          1,實(shí)現(xiàn)方式上

          a),mysql的分表是真正的分表,一張表分成很多表后,每一個(gè)小表都是完正的一張表,都對(duì)應(yīng)三個(gè)文件,一個(gè).MYD數(shù)據(jù)文件,.MYI索引文件,.frm表結(jié)構(gòu)文件。

          1. [root@BlackGhost test]# ls |grep user  
          2. alluser.MRG  
          3. alluser.frm  
          4. user1.MYD  
          5. user1.MYI  
          6. user1.frm  
          7. user2.MYD  
          8. user2.MYI  
          9. user2.frm  
          [root@BlackGhost test]# ls |grep user alluser.MRG alluser.frm user1.MYD user1.MYI user1.frm user2.MYD user2.MYI user2.frm

          簡(jiǎn)單說(shuō)明一下,上面的分表呢是利用了merge存儲(chǔ)引擎(分表的一種),alluser是總表,下面有二個(gè)分表,user1,user2。他們二個(gè)都是獨(dú)立的表,取數(shù)據(jù)的時(shí)候,我們可以通過(guò)總表來(lái)取。這里總表是沒(méi)有.MYD,.MYI這二個(gè)文件的,也就是說(shuō),總表他不是一張表,沒(méi)有數(shù)據(jù),數(shù)據(jù)都放在分表里面。我們來(lái)看看.MRG到底是什么東西

          1. [root@BlackGhost test]# cat alluser.MRG |more  
          2. user1  
          3. user2  
          4. #INSERT_METHOD=LAST  
          [root@BlackGhost test]# cat alluser.MRG |more user1 user2 #INSERT_METHOD=LAST

          從上面我們可以看出,alluser.MRG里面就存了一些分表的關(guān)系,以及插入數(shù)據(jù)的方式。可以把總表理解成一個(gè)外殼,或者是聯(lián)接池。

          b),分區(qū)不一樣,一張大表進(jìn)行分區(qū)后,他還是一張表,不會(huì)變成二張表,但是他存放數(shù)據(jù)的區(qū)塊變多了。

          1. [root@BlackGhost test]# ls |grep aa  
          2. aa#P#p1.MYD  
          3. aa#P#p1.MYI  
          4. aa#P#p3.MYD  
          5. aa#P#p3.MYI  
          6. aa.frm  
          7. aa.par  
          [root@BlackGhost test]# ls |grep aa aa#P#p1.MYD aa#P#p1.MYI aa#P#p3.MYD aa#P#p3.MYI aa.frm aa.par

          從上面我們可以看出,aa這張表,分為二個(gè)區(qū),p1和p3,本來(lái)是三個(gè)區(qū),被我刪了一個(gè)區(qū)。我們都知道一張表對(duì)應(yīng)三個(gè)文件.MYD,.MYI,.frm。分區(qū)呢根據(jù)一定的規(guī)則把數(shù)據(jù)文件和索引文件進(jìn)行了分割,還多出了一個(gè).par文件,打開(kāi).par文件后你可以看出他記錄了,這張表的分區(qū)信息,根分表中的.MRG有點(diǎn)像。分區(qū)后,還是一張,而不是多張表。

          2,數(shù)據(jù)處理上

          a),分表后,數(shù)據(jù)都是存放在分表里,總表只是一個(gè)外殼,存取數(shù)據(jù)發(fā)生在一個(gè)一個(gè)的分表里面。看下面的例子:

          select * from alluser where id='12'表面上看,是對(duì)表alluser進(jìn)行操作的,其實(shí)不是的。是對(duì)alluser里面的分表進(jìn)行了操作。

          b),分區(qū)呢,不存在分表的概念,分區(qū)只不過(guò)把存放數(shù)據(jù)的文件分成了許多小塊,分區(qū)后的表呢,還是一張表。數(shù)據(jù)處理還是由自己來(lái)完成。

          3,提高性能上

          a),分表后,單表的并發(fā)能力提高了,磁盤(pán)I/O性能也提高了。并發(fā)能力為什么提高了呢,因?yàn)椴閷ひ淮嗡ǖ臅r(shí)間變短了,如果出現(xiàn)高并發(fā)的話,總表可以根據(jù)不同的查詢,將并發(fā)壓力分到不同的小表里面。磁盤(pán)I/O性能怎么搞高了呢,本來(lái)一個(gè)非常大的.MYD文件現(xiàn)在也分?jǐn)偟礁鱾€(gè)小表的.MYD中去了。

          b),mysql提出了分區(qū)的概念,我覺(jué)得就想突破磁盤(pán)I/O瓶頸,想提高磁盤(pán)的讀寫(xiě)能力,來(lái)增加mysql性能。
          在這一點(diǎn)上,分區(qū)和分表的測(cè)重點(diǎn)不同,分表重點(diǎn)是存取數(shù)據(jù)時(shí),如何提高mysql并發(fā)能力上;而分區(qū)呢,如何突破磁盤(pán)的讀寫(xiě)能力,從而達(dá)到提高mysql性能的目的。

          4),實(shí)現(xiàn)的難易度上

          a),分表的方法有很多,用merge來(lái)分表,是最簡(jiǎn)單的一種方式。這種方式根分區(qū)難易度差不多,并且對(duì)程序代碼來(lái)說(shuō)可以做到透明的。如果是用其他分表方式就比分區(qū)麻煩了。

          b),分區(qū)實(shí)現(xiàn)是比較簡(jiǎn)單的,建立分區(qū)表,根建平常的表沒(méi)什么區(qū)別,并且對(duì)開(kāi)代碼端來(lái)說(shuō)是透明的。

          三,mysql分表和分區(qū)有什么聯(lián)系呢

          1,都能提高mysql的性高,在高并發(fā)狀態(tài)下都有一個(gè)良好的表面。

          2,分表和分區(qū)不矛盾,可以相互配合的,對(duì)于那些大訪問(wèn)量,并且表數(shù)據(jù)比較多的表,我們可以采取分表和分區(qū)結(jié)合的方式(如果merge這種分表方式,不能和分區(qū)配合的話,可以用其他的分表試),訪問(wèn)量不大,但是表數(shù)據(jù)很多的表,我們可以采取分區(qū)的方式等。

          posted on 2013-05-07 09:19 paulwong 閱讀(456) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): MYSQL

          主站蜘蛛池模板: 宜兰县| 手游| 洛隆县| 博兴县| 平顺县| 车致| 平塘县| 双峰县| 石楼县| 鹤山市| 扎赉特旗| 堆龙德庆县| 抚顺县| 江永县| 射阳县| 镇巴县| 遂昌县| 从江县| 元朗区| 绥芬河市| 神农架林区| 福贡县| 湾仔区| 安多县| 西峡县| 鄄城县| 右玉县| 台湾省| 咸丰县| 青岛市| 长治市| 尼玛县| 双城市| 湟源县| 吉水县| 伊吾县| 涞水县| 许昌市| 香格里拉县| 大冶市| 普兰县|