Index và Partition đều là các kỹ thuật trong cơ sở dữ liệu để tối ưu hóa hiệu suất truy vấn, nhưng chúng hoạt động theo những cách khác nhau và được sử dụng với mục đích khác nhau. Dưới đây là sự phân biệt chi tiết:
1. Định nghĩa
Index (Chỉ mục):
• Là một cấu trúc dữ liệu được xây dựng trên các cột của bảng nhằm tăng tốc độ truy vấn dữ liệu.
• Hoạt động như một bảng tra cứu giúp cơ sở dữ liệu tìm kiếm dữ liệu nhanh hơn thay vì quét toàn bộ bảng.
Ví dụ: Giống như mục lục của một cuốn sách, index giúp bạn nhanh chóng tìm được vị trí thông tin cần tìm mà không phải lật từng trang.
Partition (Phân vùng):
• Là cách chia nhỏ dữ liệu trong bảng thành các phân vùng (partition) dựa trên một tiêu chí nhất định, chẳng hạn như giá trị cột hoặc phạm vi ngày.
• Mỗi phân vùng là một phần vật lý độc lập của bảng và có thể được lưu trữ ở các vị trí khác nhau.
Ví dụ: Giống như chia sách thành các chương, mỗi chương lưu trữ thông tin liên quan đến một chủ đề cụ thể.
2. Mục đích
| Đặc điểm | Index | Partition |
| Tăng tốc truy vấn | Giảm thời gian truy vấn bằng cách tra cứu nhanh | Phân chia dữ liệu để xử lý song song, cải thiện hiệu năng |
| Tối ưu hiệu suất | Hữu ích với bảng lớn khi chỉ cần truy vấn một phần dữ liệu | Tối ưu hóa khi dữ liệu quá lớn hoặc yêu cầu truy vấn theo nhóm dữ liệu |
| Tăng khả năng quản lý | Không thay đổi cấu trúc bảng, chỉ thêm thông tin tra cứu | Quản lý bảng lớn dễ hơn bằng cách chia thành nhiều phân vùng nhỏ |
3. Cách hoạt động
Index:
1.Cơ sở dữ liệu tạo ra một bảng tra cứu (index table) chứa:
• Giá trị cột được index.
• Con trỏ (pointer) trỏ đến vị trí lưu trữ dữ liệu thực tế.
2. Khi thực hiện truy vấn, cơ sở dữ liệu sử dụng index để tìm vị trí dữ liệu nhanh hơn, thay vì duyệt toàn bộ bảng.
Partition:
1.Dữ liệu trong bảng được chia thành nhiều phân vùng dựa trên các tiêu chí như:
• Range Partitioning: Phân vùng dựa trên khoảng giá trị (ví dụ: dữ liệu năm 2023 ở một phân vùng, năm 2024 ở phân vùng khác).
• Hash Partitioning: Sử dụng hàm băm để chia dữ liệu ngẫu nhiên vào các phân vùng.
• List Partitioning: Chia theo danh sách giá trị cụ thể (ví dụ: phân vùng theo từng quốc gia).
• Composite Partitioning: Kết hợp nhiều phương pháp phân vùng.
2. Mỗi phân vùng có thể được lưu trữ trên các ổ đĩa khác nhau để giảm tải I/O.
4. Ưu và nhược điểm
Index:
| Ưu điểm | Nhược điểm |
| Tăng tốc độ truy vấn dữ liệu | Tốn thêm không gian lưu trữ cho bảng index |
| Thích hợp cho truy vấn các bảng lớn | Làm chậm các thao tác ghi (INSERT, UPDATE, DELETE) |
| Dễ dàng tạo và quản lý | Index không hiệu quả nếu bảng chứa quá ít dữ liệu |
Partition:
| Ưu điểm | Nhược điểm |
| Tăng hiệu năng truy vấn dữ liệu lớn | Cấu hình phức tạp hơn so với index |
| Giảm tải I/O bằng cách đọc/ghi từng phân vùng nhỏ | Không tối ưu cho truy vấn không theo tiêu chí phân vùng |
| Hữu ích trong quản lý bảng lớn với dữ liệu theo thời gian | Yêu cầu lưu trữ phức tạp và quản lý nhiều tablespace |
5. Ví dụ minh họa
Index – Tìm kiếm nhanh hơn
• Bảng KHACH_HANG có 10 triệu dòng, bạn muốn tìm khách hàng có MA_KHACH_HANG = ‘KH1234’.
• Nếu không có index, cơ sở dữ liệu phải quét toàn bộ bảng để tìm dòng chứa KH1234.
• Nếu tạo index trên cột MA_KHACH_HANG, cơ sở dữ liệu chỉ cần tra cứu index và truy xuất dòng đó nhanh hơn.
Partition – Chia nhỏ dữ liệu
• Bảng GIAO_DICH có 10 tỷ dòng, lưu trữ các giao dịch từ năm 2010 đến 2024.
• Bạn muốn truy vấn tất cả giao dịch trong năm 2023.
• Nếu dữ liệu được chia thành các phân vùng theo năm (2010, 2011, …, 2024), truy vấn sẽ chỉ quét phân vùng năm 2023 thay vì toàn bộ bảng.
6. Kết hợp Index và Partition
• Index trên Partition:
- Mỗi phân vùng có thể có riêng một index để tăng tốc độ truy vấn trong phân vùng đó.
- Ví dụ: Bảng GIAO_DICH được chia phân vùng theo năm và tạo index trên cột MA_KHACH_HANG cho từng phân vùng.
• Global Index trên Partition:
- Khi cần tìm kiếm toàn bộ bảng (bao gồm nhiều phân vùng), index toàn cục giúp truy vấn nhanh hơn.
Khi nào dùng Index và Partition?
| Tình huống | Sử dụng Index | Sử dụng Partition |
| Tìm kiếm nhanh một hoặc vài dòng dữ liệu | ✅ | ❌ |
| Bảng rất lớn, cần tối ưu truy vấn theo nhóm dữ liệu | ❌ | ✅ |
| Truy vấn không theo tiêu chí cụ thể | ✅ | ❌ |
| Dữ liệu liên tục tăng theo thời gian, cần quản lý theo thời kỳ | ❌ | ✅ |
| Tăng tốc cả đọc và ghi trong hệ thống lớn | Kết hợp cả Index và Partition | Kết hợp cả Index và Partition |
Kết luận
• Index tăng tốc độ truy vấn bằng cách giảm thời gian tìm kiếm dữ liệu cụ thể.
• Partition chia nhỏ bảng thành các khối dữ liệu riêng biệt để giảm tải khi xử lý dữ liệu lớn hoặc truy vấn theo nhóm.
• Trong thực tế, chúng thường được kết hợp để tối ưu hóa cả truy vấn và quản lý dữ liệu.