MySQL Partition
What is table partitioning
- Table partitioning is a way to divide a large table into smaller, more manageable parts without having to create separate tables for each part.
- Partitioning can be achieved without splitting tables by physically putting tables on individual disk drives
- Partitioning is not visible to end users, a partitioned table behaves like one logical table when queried.
Why wee need partitioning
- Help speed up loading and archiving of data
- Perform maintenance operations on individual partitions instead of the whole table
- Improve query formance. Instead of scanning the whole table, now you only need to scan only one or a few partitions to find the expected record
Hash partitioning
Được sử dụng khi bạn muốn phân bố đồng đều data cho các
partitionĐể tạo
HASHpartition, thêm vào câu lệnhPARTITION BY HASH (expr)sau lệnhCREATE TABLE.exprlà 1 expression trả về 1 integer. Ví dụ:PARTITION BY HASH (YEAR(date_created))
- Khi 1 record được insert, hệ thống sẽ chọn partition mà record sẽ được lưu dựa trên phép chia dư như sau:
N = MOD(expr, num).numlà số partition. Ví dụ:
Nếu chúng ta thêm 1 record mà giá trị của col3 là 2005-09-15 thì vị trí partition mà record sẽ được lưu được đánh giá như sau:
Vậy record sẽ được lưu vào partition số 1
- Khi truy vấn hệ thống sẽ tìm partition
kcho giá trị hash tương ứngk = MOD(expr, n)của record và tìm record trong parttionkđó thay vìscantoàn bộ bảng để tìm
Tìm thấy record trong parttion p0
Linear Hash Partition
- Về cơ bản giống
HASH PARTITIONnhưngLINEAR HASH PARTITIONsử dụng thuật toánlinear powers-of-twothay vìmodulusnhư thông thường
Vị trí N partition mà record sẽ được lưu vào được mô tả dưới thuật toán sau:
Giả sử chúng ta có bảng t1 với schema như sau
Chúng ta muốn insert record t1 có giá trị của col3 là '2003-04-14'. Thì partition N mà record được lưu được xác định như sau:
- The advantage in partitioning by linear hash is that the adding, dropping, merging, and splitting of partitions is made much faster, which can be beneficial when dealing with tables containing extremely large amounts (terabytes) of data. The disadvantage is that data is less likely to be evenly distributed between partitions as compared with the distribution obtained using regular hash partitioning.
Key partitioning
- Hoạt động tương tự như
HASHnhưng thay vì sử dụngexprdo người dùng cung cấp,key partitionsử dụng hàmhashđược cung cấp bời hệ thống, thông thường làMD5
KEY() có thể nhận 0 hoặc nhiều giá trị tên cột. Bất cứ tên cột nào được sư dụng phải là 1 thành phần trong các PRIMARY KEY của bảng. Nếu không có tên cột nào được cung cấp cho hàm KEY() thì PRIMARY KEY của bảng sẽ được sử dụng
Range partitioning
Được sử dụng khi muốn nhóm các giá record nằm trong 1 khoảng nào đó lại với nhau.
Giả sử số lượng đơn hàng của 1 cửa hàng trong những năm quá lớn khiến việc truy vấn thông tin của 1 đơn hàng mất rất nhiều thời gian. Vì vậy chúng ta đề ra giải pháp phân chia bảng đơn hàng thành 10 partition để khi truy vấn thông tin 1 đơn hàng, ta chỉ cần tìm thông tin đơn hàng trong partition tương ứng mà đơn hàng đó được lưu
List partitioning
| Continental | CountryID |
|---|---|
| Asia | 3, 5, 6, 9, 17 |
| Europe | 1, 2, 10, 11, 19, 20 |
| Africa | 4, 12, 13, 14, 18 |
| North America | 7, 8, 15, 16 |
| South America | 20, 25, 30, 44, 50 |
- Giả sử chúng ta cần partition một bảng dữ liệu
usertheo vị trí địa lý lục địa củauser
Giả sử chúng ta cần insert 1 user
User này sẽ được lưu vào partition pEurope vì có country_id = 20 nằm trong (1, 2, 10, 11, 19, 20)
Reference
https://www.cathrinewilhelmsen.net/2015/04/12/table-partitioning-in-sql-server/