Giới hạn phân vùng mysql 8

Như chúng ta đã biết mysql và nhiều hệ thống quản trị cơ sở dữ liệu khác, hãy lưu trữ dữ liệu dưới dạng bảng bao gồm các hàng và cột. Mỗi lần truy vấn DB engine phải duyệt qua toàn bộ bảng để lấy dữ liệu, điều này tạo ra vấn đề về hiệu suất khi bản ghi trong bảng quá lớn, vấn đề này sẽ được giải quyết khá đơn giản bằng cách sử dụng phân vùng, nhờ kỹ thuật này . Cùng xem một ví dụ để hiểu rõ hơn về các hoạt động của phân vùng nhé

Ví dụ: chúng ta có bảng người chưa được tạo phân vùng, và có các trường dữ liệu cụ thể như sau

Bảng này khi tạo ra mặc định sẽ được lưu trữ thành 1 đoạn trong hệ thống tệp

Khi sử dụng phân vùng, bảng sẽ được phân chia thành nhiều đoạn với khóa mà chúng ta đã định nghĩa. Ví dụ ở đây mình dùng trường tuổi làm key

Chúng ta có thể kiểm tra mức độ hiệu quả của phân vùng bằng câu truy vấn đơn giản như sau

select * from persons where age = 24

Trong trường hợp chưa sử dụng phân vùng thời gian thực thi truy vấn là 0. 00064 giây

Với phân vùng thì kết quả khác xác định rõ, thời gian thực thi chỉ còn 0. 0016 giây

Do bảng của chúng ta đang có ít dữ liệu nên hiệu quả khó có thể cảm nhận được, tuy nhiên với những cơ sở dữ liệu có hàng triệu bản ghi thì đây thực sự là một giải pháp tuyệt vời.
Như vậy qua ví dụ trên bạn đã hiểu phần nào về Partition là gì và tác dụng của nó như thế nào, bây giờ chúng ta cùng đi vào chi tiết hơn nhé.

1. Cách tạo phân vùng

Trước khi tạo phân vùng, bạn phải đảm bảo cột mà bạn sử dụng được sử dụng thường xuyên trong các truy vấn, thì việc tạo phân vùng mới thực sự có ý nghĩa

Bạn có thể tạo phân vùng bằng cách sử dụng CREATE TABLE hoặc ALTER TABLE

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
ALTER TABLE tbl_name [partition_options]

Ví dụ

create table products[id integer, name varchar[100], price integer] partition by key[price];
alter table persons partition by key[age] partitions 5;
-- key: là column được chỉ định để phân chia table
-- 5: là số lượng partition mà bạn muốn chia

2. Main partition type

  • phân vùng phạm vi
  • Phân vùng danh sách
  • Phân vùng cột
  • phân vùng băm
  • phân vùng chính
  • Phân vùng con
    Trong phạm vi bài viết và sự hiểu biết mình sẽ tập trung làm rõ 2 loại phân vùng là Phân vùng theo phạm vi, Phân vùng theo danh sách. Các loại còn hẹn lại các bạn trong một bài viết khác.

2. 1. phân vùng phạm vi

Phân vùng theo phạm vi đơn giản là phân vùng theo khoảng mà bạn muốn sử dụng, tức là chia bảng ra nhiều khoảng giá trị, các khoảng giá trị này phải liên tiếp và không chồng chéo lên nhau, ví dụ trong 1 năm bạn có 12

p1. 01-01-2020 đến 31-01-2020
p2. 01-02-2020 đến 29-02-2020
p3. 01-03-2020 đến 30-03-2020
.
Mục tiêu của vùng chia theo khoảng sẽ giúp việc chèn và tìm kiếm nhanh hơn rất nhiều, khi chèn nếu giá trị nằm trong khoảng nào đó thì nó sẽ được chèn vào đúng khoảng đã định nghĩa . Việc tạo phân vùng phạm vi yêu cầu từ khóa 

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
0 để chỉ định phạm vi cần sử dụng. Cùng xem ví dụ sau.

mysql> CREATE TABLE sales [no INT NOT NULL, date TIMESTAMP NOT NULL, 
code VARCHAR[15] NOT NULL, amount INT NOT NULL] 
PARTITION  BY RANGE [amount] [
PARTITION p0 VALUES LESS THAN [100], 
PARTITION  p1 VALUES LESS THAN [300], 
PARTITION p2 VALUES LESS THAN [700], 
PARTITION  p3 VALUES LESS THAN [1000]]; 
Query OK, 0 rows affected [1.34 sec]

Tại đây, chúng tôi đã tạo ra một bảng 

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
1 cùng với 4 phân vùng được chỉ rõ phạm vi sử dụng, p0 sẽ lưu trữ những bản ghi có 
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
2 < 100. p2 will have 100 1000 thì sẽ như thế nào nhỉ? . D

2. 2. Phân vùng danh sách

Loại này khác với loại phạm vi một chút là nó không phân chia theo khoảng nữa mà nó bổ sung những phần tử chỉ được tạo thành 1 danh sách, loại này chúng ta sẽ sử dụng từ khóa 

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
4 [list_value] để tạo 
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
5. Lấy ví dụ trên nhưng thêm một chút trong bảng 
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
1 chúng ta có thêm cột mã nhân viên bán hàng là 
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
7 cũng được biết là nhân viên nào đã bán, và ví dụ trong một công ty chúng ta có 10 nhân viên bán hàng, cùng với 3

Ví dụ

  • Nhóm A làm việc tại Phạm Văn Đồng
  • Nhóm B làm việc tại Trần Duy Hưng
  • Nhóm C làm việc ở Láng

Bây giờ cùng tạo bảng bán hàng như sau

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
6

Và như vậy là sau này khi muốn tìm kiếm hệ thống thống kê theo nhóm sẽ nhanh hơn, thống kê nhân viên nào bán được bao nhiêu hàng cũng sẽ nhanh hơn là duyệt toàn bộ bảng

3. Xóa bỏ sự chia cắt

Nếu trong quá trình vận chuyển hàng hệ thống bạn không cần lượng dữ liệu nào nữa thì có thể xóa đi bằng cách xóa chính phân vùng đã định nghĩa

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
7

4. Kết luận

Như vậy trong bài viết này mình giới thiệu cho các bạn khái niệm, mục đích sử dụng của 

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
8, và 2 loại phân vùng chính hay được sử dụng là 
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
9. Hy vọng đây sẽ là kiến ​​thức bổ sung hữu ích giúp các bạn tối ưu truy vấn trong quá trình làm dự án với những cơ sở dữ liệu lơn. Bài viết có thể còn nhiều thiếu sót , cũng như việc sử dụng từ ngữ 
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[create_definition,...]
[table_options]
[partition_options]
5 và 
ALTER TABLE tbl_name [partition_options]
1 còn lẫn lộn mong các bạn đóng góp và hẹn các bạn trong bài viết sớm nhất khoảng 4 loại 
ALTER TABLE tbl_name [partition_options]
2 còn lại

Chủ Đề