Database Index - P2

Tran Quang Hop
Edumall Engineering
3 min readFeb 28, 2019

Làm thế nào để tôi biết: dùng loại Database Index nào tối ưu hơn, kiểu lưu trữ Data Index nào giúp tối ưu tốc độ query hơn. Tất cả sẽ được trả lời ở bài này.
Mọi người có thể theo dõi phần 1 tại đây nhé

MỤC LỤC

  1. Các kiểu Index và ứng dụng bài toán cụ thể.
  2. Các loại Database Index và ứng dụng bài toán cụ thể.
  3. Các lưu ý khi sử dụng Database Index
  1. Các kiểu Index và ứng dụng bài toán cụ thể.

1.1. B-tree Index

  • B-tree index sẽ lưu trữ Index theo Binary tree data structure
  • Vì sử dụng lưu trữ theo Binary tree data structure nên dữ liệu được sắp xếp và có thể sử dụng Binary search cho tập dữ liệu này.
  • Vì dữ liệu được sắp xếp thành các node nên phù hợp cho các câu query sử dụng các toán tử =, >, >=, <, <=,BETWEEN, LIKE

1.2. Hash index

  • Hash index lưu trữ Index theo dạng key- value.
  • Vì dữ liệu được lưu trữ dưới dạng key-value nên chỉ phù hợp cho các câu query sử dụng các toán tử =, <>

1.3. Áp dụng vào bài toán thực tế
B-tree sử dụng cho các query so sánh và tìm kiếm string theo Regex. Ví dụ

SELECT * FROM tbl_user WHERE name LIKE ‘tran%’;
SELECT * FROM tbl_user WHERE name LIKE ‘tran%_hop%’;
SELECT * FROM tbl_user WHERE age > 18;

Hash indexes sử dụng cho các query so sánh bằng và khác. Vì tốc độ lớn hơn B-tree. Ví dụ:

SELECT * FROM tbl_user WHERE name = ‘tran hop’;
SELECT * FROM tbl_user WHERE age = 18;
SELECT * FROM tbl_user WHERE age <> 18;

2. Các loại Database Index và ứng dụng bài toán cụ thể.

2.1. Cluster Index

  • Cluster Index là sắp xếp trực tiếp trên bảng dữ liệu dựa vào 1 field cụ thể nào đấy (thường ở đây sẽ là primary key).
  • Cluster Index phù hợp cho bài toán sau: Query vào bảng chủ yếu là query hoặc sắp xếp theo field được index.
  • Ưu điểm: Tiết kiệm dung lượng lưu trữ mà vẫn tăng tốc độ query
  • Nhược điểm: Nếu có query vào bảng theo trường dữ liệu khác sẽ rất chậm.

2.2. Non-cluster Index

  • Non-Cluster Index là tạo thêm các bảng bao gồm các trường dữ liệu được Index, con trỏ trỏ đến bản ghi trên bảng dữ liệu. Bảng này được sắp xếp theo dữ liệu của field được Index.
  • Non-Cluster Index phù hợp cho bài toán sau: Query và order bảng theo nhiều field khác nhau.
  • Ưu điểm: Đáp ứng được tốc độ cho nhiều câu query vào các field khác nhau.
  • Nhược điểm: Tốn dung lượng lưu trữ thêm bảng Index.

3. Các lưu ý khi sử dụng Database Index.

  • Có cơ chế Reindex mỗi khi có 1 bản ghi mới được thêm hoặc bản ghi bị xóa đi.
  • Lựa chọn loại Index phù hợp để tối ưu tốc độ query.

Sau 2 loạt bài về Database Index của mình, hi vọng mọi người sẽ hiểu hơn về bản chất của Database Index, từ đó lựa chọn cho mình loại Index, kiểu Index phù hợp từng loại bài toán và bổ sung thêm cho mình 1 phương pháp để tối ưu performance của sản phẩm.

--

--