1. 程式人生 > >Mysql分表和分割槽的區別

Mysql分表和分割槽的區別


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