Mysql分表和分割槽的區別

2022-02-20 19:29:07 字數 2237 閱讀 6367

一,什麼是mysql分表,分割槽 

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

什麼是分割槽,分割槽呢就是把一張表的資料分成n多個區塊,這些區塊可以在同乙個磁碟上,也可以在不同的磁碟上,具體請參考mysql分割槽功能詳細介紹,以及例項 

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

1,實現方式上 

a),mysql的分表是真正的分表,一張表分成很多表後,每乙個小表都是完正的一張表,都對應三個檔案,乙個.myd資料檔案,.myi索引檔案,.frm表結構檔案。

sql**  

[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到底是什麼東西

sql**  

[root@blackghost test]# cat alluser.mrg |more    

user1    

user2    

#insert_method=last

從上面我們可以看出,alluser.mrg裡面就存了一些分表的關係,以及插入資料的方式。可以把總表理解成乙個外殼,或者是聯接池。 

b),分割槽不一樣,一張大表進行分割槽後,他還是一張表,不會變成二張表,但是他存放資料的區塊變多了。

sql**  

[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有點像。分割槽後,還是一張,而不是多張表。 

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這種分表方式,不能和分割槽配合的話,可以用其他的分表試),訪問量不大,但是表資料很多的表,我們可以採取分割槽的方式等。

分表和分割槽的區別

一,什麼是mysql分表,分割槽 什麼是分表,從表面意思上看呢,就是把一張表分成n多個小表,具體請看 mysql分表的3種方法 什麼是分割槽,分割槽呢就是把一張表的資料分成n多個區塊,這些區塊可以在同乙個磁碟上,也可以在不同的磁碟上,具體請參考mysql分割槽功能詳細介紹,以及例項 a mysql的...

MySQL分割槽和分表

1.分割槽的型別 1 range 把連續區間按範圍劃分 例 create table user id int 11 money int 11 unsigned not null,date datetime partition by range year date partition p2014 va...

mysql分表和表分割槽詳解

為什麼要分表和分割槽?日常開發中我們經常會遇到大表的情況,所謂的大表是指儲存了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,效能低下,如果涉及聯合查詢的情況,效能會更加糟糕。分表和表分割槽的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改...