mysql分表,分區的區別和聯繫

一,什麼是mysql分表,分區 php

什麼是分表,從表面意思上看呢,就是把一張表分紅N多個小表,具體請看mysql分表的3種方法 html

什麼是分區,分區呢就是把一張表的數據分紅N多個區塊,這些區塊能夠在同一個磁盤上,也能夠在不一樣的磁盤上,具體請參考mysql分區功能詳細介紹,以及實例 mysql

二,mysql分表和分區有什麼區別呢 sql

1,實現方式上 併發

a),mysql的分表是真正的分表,一張表分紅不少表後,每個小表都是完正的一張表,都對應三個文件,一個.MYD數據文件,.MYI索引文件,.frm表結構文件。 高併發

  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

簡單說明一下,上面的分表呢是利用了merge存儲引擎(分表的一種),alluser是總表,下面有二個分表,user1,user2。他們二個都是獨立的表,取數據的時候,咱們能夠經過總表來取。這裏總表是沒有.MYD,.MYI這二個文件的,也就是說,總表他不是一張表,沒有數據,數據都放在分表裏面。咱們來看看.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裏面就存了一些分表的關係,以及插入數據的方式。能夠把總表理解成一個外殼,或者是聯接池。 spa

b),分區不同,一張大表進行分區後,他仍是一張表,不會變成二張表,可是他存放數據的區塊變多了。 code

  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這張表,分爲二個區,p1和p3,原本是三個區,被我刪了一個區。咱們都知道一張表對應三個文件.MYD,.MYI,.frm。分區呢根據必定的規則把數據文件和索引文件進行了分割,還多出了一個.par文件,打開.par文件後你能夠看出他記錄了,這張表的分區信息,根分表中的.MRG有點像。分區後,仍是一張,而不是多張表。 htm

2,數據處理上

a),分表後,數據都是存放在分表裏,總表只是一個外殼,存取數據發生在一個一個的分表裏面。看下面的例子:

select * from alluser where id='12'表面上看,是對錶alluser進行操做的,其實不是的。是對alluser裏面的分表進行了操做。

b),分區呢,不存在分表的概念,分區只不過把存放數據的文件分紅了許多小塊,分區後的表呢,仍是一張表。數據處理仍是由本身來完成。

3,提升性能上

a),分表後,單表的併發能力提升了,磁盤I/O性能也提升了。併發能力爲何提升了呢,由於查尋一次所花的時間變短了,若是出現高併發的話,總表能夠根據不一樣的查詢,將併發壓力分到不一樣的小表裏面。磁盤I/O性能怎麼搞高了呢,原本一個很是大的.MYD文件如今也分攤到各個小表的.MYD中去了。

b),mysql提出了分區的概念,我以爲就想突破磁盤I/O瓶頸,想提升磁盤的讀寫能力,來增長mysql性能。
在這一點上,分區和分表的測重點不一樣,分表重點是存取數據時,如何提升mysql併發能力上;而分區呢,如何突破磁盤的讀寫能力,從而達到提升mysql性能的目的。

4),實現的難易度上

a),分表的方法有不少,用merge來分表,是最簡單的一種方式。這種方式根分區難易度差很少,而且對程序代碼來講能夠作到透明的。若是是用其餘分表方式就比分區麻煩了。

b),分區實現是比較簡單的,創建分區表,根建日常的表沒什麼區別,而且對開代碼端來講是透明的。

三,mysql分表和分區有什麼聯繫呢

1,都能提升mysql的性高,在高併發狀態下都有一個良好的表面。

2,分表和分區不矛盾,能夠相互配合的,對於那些大訪問量,而且表數據比較多的表,咱們能夠採起分表和分區結合的方式(若是merge這種分表方式,不能和分區配合的話,能夠用其餘的分表試),訪問量不大,可是表數據不少的表,咱們能夠採起分區的方式等。

收藏、分享這篇文章!

轉載請註明
做者:海底蒼鷹
地址:http://blog.51yip.com/mysql/1029.html
相關文章
相關標籤/搜索