[Tôi hiểu kĩ, bạn cũng thế]: Index database: Giới thiệu - p.1

2 minute read

Mình viết theo phong cách Chi-pu nên bạn đọc thông cảm nhé, vì mình đọc tài liệu tiếng anh là chính. enjoy bài viết này thôi.

" Thời điểm tốt nhất để trồng cây là 10 năm trước, thời điểm tốt thứ hai chính là ngày hôm nay. Vậy nên nếu ai vẫn còn không nắm chắc về index trong database thì đây là thời điểm hoàn hảo để làm điều đó. "

Index là một thành phần vô cùng quan trọng và đóng vai trò then chốt trong sự thành công của các database hiện nay. Và series này sẽ giúp bạn có cái nhìn chi tiết và tường tận về index từ định nghĩa cho đến ứng dụng.

Định Nghĩa:

Index là một cơ chế mapping giữa key và record cần tìm thông qua một giá trị search key được chọn.
Cấu trúc:
Về cơ bản nó là một file giống với file hệ thống. Mỗi file có thể có một hoặc nhiều index file. Và mỗi index file lưu trữ liên kết của search key với pointer records cần tìm. Data records phải có cột giá trị là một thuộc tính trong search key. Nó có thể trỏ tới một record hoặc một block (chứa nhiều records) tùy thuộc vào thuật toán index.


Mỗi index entry sẽ gồm 2 cột: 1 cột là key được index và Row ID của record tương ứng.

Công dụng:

Chúng ta đều biết đến công dụng của index là làm tăng tốc quá trình tìm kiếm dựa trên một hoặc nhiều key. Vậy còn gì nữa không ?
Không chỉ vậy thôi, mục tiêu của index là giúp việc tìm kiếm record(s) trên một data structure phục vụ tốt cho tìm kiếm. Từ đó tăng hiệu suất tìm kiếm lên đáng kể.


Các data trong file index đã được sort nhờ đó khi tìm kiếm với Binary Search độ phức tạp sẽ còn O(logN).

Phân loại index

Về mặt khái niệm, index có 2 loại chính là:
  • Primary index.
  • Secondary index.
Ngoài ra, còn có:
  • Sparse Index.
  • Dense Index.
  • Multilevel Index.
Về mặt lưu trữ, có 2 cách để cấu trúc:
  • Clustered index.
  • Non-clustered index.
Về thuật toán lưu trữ:
  • B-tree Index.
  • Hash index.
  • Spatial index.
  • Full-text index.

Index luôn tốt?

Đương nhiên là không, người duy nhất đối tốt với bạn vô điều kiện là ba mẹ bạn. Còn index nếu không khéo léo trong việc khởi tạo và sử dụng sẽ gây phản tác dụng. Đơn cử như làm chậm các tác vụ insert và update table. Vì với việc sử dụng index, database đang thực hiện thêm một số tính toán và bộ nhớ phụ trên sự thay đổi của một record. Vậy nên đối với các table high-write, low-read thì việc đánh index sẽ là ác mộng.
Ngoài ra, đôi khi việc query trên một key của record đã được đánh index có thể bị chậm hơn nếu không đánh index. Người ta thường gọi là "slow indexes". Vấn đề này xảy ra nếu search key được chọn không có khả năng selective nghĩa là không có tính phân loại.

Bài tiếp theo: Phân loại index.

Help me water it