Lập trình 29/10/2026 7 phút

Partitioning đo thật: lọc theo khoá phân vùng chỉ chạm đúng 1 trong 10 phân vùng (quét 100.000 dòng, 10,8 ms) thay vì cả triệu dòng (65,8 ms); và xoá dữ liệu cũ bằng DROP PARTITION chỉ 65 ms thay vì DELETE từng dòng

Phần 10 sê-ri MySQL và InnoDB: partitioning chia một bảng lớn thành nhiều phân vùng vật lý theo khoá, và partition pruning cho truy vấn chỉ chạm đúng phân vùng cần. Đo thật trong mysql:8 trên bảng 1 triệu dòng chia 10 phân vùng theo RANGE(created): lọc created= chỉ chạm 1 phân vùng (p2), lọc BETWEEN chạm p1,p2,p3, còn lọc theo cột không phải khoá phân vùng thì quét cả 10. Có pruning, truy vấn quét 100.000 dòng mất 10,8 ms; không pruning quét cả 1.000.000 dòng mất 65,8 ms. Và xoá dữ liệu cũ bằng DROP PARTITION chỉ 65 ms so với DELETE 150 ms — khoảng cách giãn lớn trên đĩa thật.

Cơ sở dữ liệu 22/09/2026 5 phút

Phân vùng bảng trong PostgreSQL: range, list, hash — chọn kiểu nào cho dữ liệu nào

PostgreSQL có ba kiểu phân vùng: RANGE theo khoảng (ngày, số) cho dữ liệu thời gian, LIST theo giá trị rời rạc (miền, loại), HASH chia đều theo băm khóa. Đo thật: dòng tự định tuyến vào đúng vùng (RANGE 100k mỗi năm, HASH cân bằng ~100k mỗi vùng), và một truy vấn chỉ quét đúng partition liên quan. Khi nào dùng kiểu nào. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 5 phút

Khi nào nên phân vùng PostgreSQL: con dao hai lưỡi, đo trước khi chia

Phân vùng không phải luôn nhanh hơn. Đo thật: cùng 3 triệu dòng, truy vấn khớp khóa phân vùng nhanh gấp 5 lần, nhưng truy vấn point lookup theo cột khác lại chậm gấp 20 lần (phải dò index của cả 50 vùng) cộng planning đắt gấp 7 lần. Khi nào phân vùng đáng, khi nào chỉ thêm phức tạp. PostgreSQL 16.

Lập trình 22/09/2026 8 phút

Hive partitioning đo thật: chia Parquet thành thư mục theo giá trị cột cho engine bỏ qua cả phân vùng, nên lọc theo quốc gia chỉ đọc 1 trong 8 thư mục và nhanh hơn 3,5 lần, nhưng phân vùng theo cột 2000 giá trị đẻ ra 2000 file nhỏ và chậm hơn 27 lần

Hive partitioning chia dữ liệu thành nhiều thư mục theo giá trị một cột, đưa giá trị vào đường dẫn, nên truy vấn lọc theo cột đó bỏ qua được cả thư mục. Đo thật trong DuckDB 2.0 trên 10 triệu dòng: lọc WHERE country bằng VN trên dữ liệu phân vùng theo country chỉ đọc 1 trong 8 thư mục, mất 9,9 ms so với 34,4 ms khi đọc file đơn, nhanh hơn 3,5 lần nhờ partition pruning. Không lọc theo cột phân vùng thì không giúp. Phân vùng theo cột 2000 giá trị đẻ ra 2000 file nhỏ và quét toàn bộ mất 914 ms, chậm hơn file đơn 27 lần vì vấn đề file nhỏ.