Partitioned Table trong MySQL

Bảng phụ (partitioned table) là một cách để tách một bảng lớn thành nhiều bảng nhỏ hơn, mỗi bảng chứa một phần dữ liệu cụ thể. Điều này giúp tăng tốc độ truy vấn và giảm thời gian backup dữ liệu.

Lợi ích của bảng phụ:

  1. Tăng tốc độ truy vấn: Bởi vì mỗi bảng chỉ chứa một phần dữ liệu cụ thể, nên tốc độ truy vấn sẽ nhanh hơn so với một bảng lớn chứa tất cả dữ liệu.
  2. Giảm thời gian backup dữ liệu: Bởi vì mỗi bảng chỉ cần backup dữ liệu của mình, nên thời gian backup sẽ ngắn hơn so với backup toàn bộ dữ liệu trong một bảng lớn.
  3. Tăng tính linh hoạt: Bảng phụ cho phép bạn tách dữ liệu theo tiêu chí cụ thể, giúp cho việc quản lý dữ liệu trở nên dễ dàng hơn.
  4. Tăng tính bảo mật: Bảng phụ có thể được đặt trong một database riêng biệt, giúp tăng tính bảo mật cho dữ liệu.

Ví dụ: Sử dụng bảng phụ (partitioned table)

CREATE TABLE order_history (
  order_id INT,
  order_date DATE,
  product VARCHAR(255),
  quantity INT
)
PARTITION BY RANGE (order_date) (
  PARTITION p0 VALUES LESS THAN ('2020-01-01'),
  PARTITION p1 VALUES LESS THAN ('2020-02-01'),
  PARTITION p2 VALUES LESS THAN ('2020-03-01')
);

Trong ví dụ này, chúng ta đã tạo một bảng đơn hàng với cột order_date làm cơ sở để phân chia bảng thành các bảng phụ. Khi truy vấn dữ liệu, chúng ta sẽ chỉ truy vấn dữ liệu trong bảng phụ tương ứng, giảm thiểu tải trên bảng gốc và tăng tốc độ truy vấn.

Để lưu dữ liệu vào bảng phụ, bạn có thể sử dụng câu lệnh INSERT như sau:

INSERT INTO order_history (order_id, order_date, product, quantity)
VALUES (1001, '2020-01-01', 'iPhone X', 2),
       (1002, '2020-01-02', 'MacBook Pro', 1);

Để truy vấn dữ liệu trong một bảng phụ cụ thể, bạn có thể sử dụng câu lệnh SELECT với điều kiện tùy chọn FROMWHERE như sau:

SELECT order_id, order_date, product, quantity
FROM order_history
WHERE order_date BETWEEN '2020-01-01' AND '2020-01-31'

Trong ví dụ này, chúng ta sẽ truy vấn dữ liệu trong bảng phụ p0, chỉ lấy các đơn hàng được đặt trong tháng 1 năm 2020. Chúng ta có thể thay đổi điều kiện WHERE để truy vấn dữ liệu trong bảng phụ khác.

Leave a Comment