一、什么是mysql分表,分區
什么是分表,從表面意思上看呢,就是把一張表分成N多個小表
什么是分區,分區呢就是把一張表的數據分成N多個區塊,這些區塊可以在同一個磁盤上,也可以在不同的磁盤上
二、mysql分表和分區有什么區別呢
1、實現方式上
- mysql的分表是真正的分表,一張表分成很多表后,每一個小表都是完整的一張表,都對應三個文件,一個.MYD數據文件,.MYI索引文件,.frm表結構
- 分區不一樣,一張大表進行分區后,他還是一張表,不會變成二張表,但是他存放數據的區塊變多了。
2、提高性能上
- 分表重點是存取數據時,如何提高mysql并發能力上;
- 而分區呢,如何突破磁盤的讀寫能力,從而達到提高mysql性能的目的。
3、實現的難易度上
1、分表的方法有很多,用merge來分表,是最簡單的一種方式。這種方式根分區難易度差不多,并且對程序代碼來說可以做到透明的。如果是用其他分表方式就比分區麻煩了。
2、分區實現是比較簡單的,建立分區表,根建平常的表沒什么區別,并且對開代碼端來說是透明的。
三、mysql分表和分區有什么聯系呢
1,都能提高mysql的性高,在高并發狀態下都有一個良好的表面。
2,分表和分區不矛盾,可以相互配合的,對于那些大訪問量,并且表數據比較多的表,我們可以采取分表和分區結合的方式(如果merge這種分表方式,不能和分區配合的話,可以用其他的分表試),訪問量不大,但是表數據很多的表,我們可以采取分區的方式等。
四、 分庫分表存在的問題。
1、事務問題。
在執行分庫分表之后,由于數據存儲到了不同的庫上,數據庫事務管理出現了困難。如果依賴數據庫本身的分布式事務管理功能去執行事務,將付出高昂的性能代價;如果由應用程序去協助控制,形成程序邏輯上的事務,又會造成編程方面的負擔。
2、跨庫跨表的join問題。
在執行了分庫分表之后,難以避免會將原本邏輯關聯性很強的數據劃分到不同的表、不同的庫上,這時,表的關聯操作將受到限制,我們無法join位于不同分庫的表,也無法join分表粒度不同的表,結果原本一次查詢能夠完成的業務,可能需要多次查詢才能完成。
3、額外的數據管理負擔和數據運算壓力。
額外的數據管理負擔,最顯而易見的就是數據的定位問題和數據的增刪改查的重復執行問題,這些都可以通過應用程序解決,但必然引起額外的邏輯運算,例如,對于一個記錄用戶成績的用戶數據表userTable,業務要求查出成績最好的100位,在進行分表之前,只需一個order by語句就可以搞定,但是在進行分表之后,將需要n個order by語句,分別查出每一個分表的前100名用戶數據,然后再對這些數據進行合并計算,才能得出結果。