[Tôi hiểu kĩ, bạn cũng thế]: Index database: Phân loại index - p.2

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 đó. "

Ở bài trước, chúng ta đã có bức tranh tổng quan về index. Ở bài này, chúng ta sẽ định nghĩa từng loại index có trong databse.

Primary Index

Primary Index là một file đã được sort với độ dài của records là cố định. Nó gồm 2 cột, cột đầu tiên là primay-key, cột thứ hai là pointer tới block (hoặc page) chứa records tương ứng. Data trong file này đã được sort theo primary-key.
Có 2 cách để tổ chức index trong data-file, đó là:
  • Dense Index
  • Với dense index, mỗi record trong table sẽ có 1 entity index trong file index. Hay nói cách khác số lượng entity trong index file bằng với số lượng record trong table. Vì vậy tốc độ tìm kiếm là nhanh nhất, nhưng bù lại tốn nhiều memory cho việc lưu trữ.
    Dense index tận dụng được tối đa lợi ích nếu size của file index vừa với main memory. Khi đó bất kì một thao tác tìm kiếm nào đều sẽ chỉ tốn 1 I/O.
  • Sparse Index
  • Đối với những table có lượng data lớn thì dense index sẽ tốn thêm một lượng memory đáng kể cho việc lưu trữ index. Vậy nên để giữ cho memory của file index ở mức hợp lí, database sẽ dùng sparse index. Thay vì liên kết mỗi record với index, chúng ta sẽ chia data đã được sắp xếp thành nhiều block, và chỉ pointer tới record đầu tiên trong mỗi block. Record đầu tiên này gọi là Anchor record hay Block anchor.

Clustered Index

Clustered-index định nghĩa thứ tự các records trong table, nghĩa là toàn bộ records sẽ được lưu trữ vật lí dựa trên cluster index. Hiển nhiên, table chỉ có duy nhất một cách lưu trữ vật lí, vây nên mỗi table chỉ có duy nhất 1 clustered index. Primary-index không nhất thiết phải là clustering-index ( mặc dù trong thực tế 95% trường hợp thì primay-index là clustering-index), ngược lại cũng thế.

Secondary Index hay non-clustering index

Khác với Primary index, Secondary Index ( hay non-clustering index ) không chứa vị trí của record trong table, nó chỉ chứ thông tin vị trí được xác định bởi primay-index. Điều này dẫn đến secondary-index luôn luôn là dense index. Bởi vì chúng ta không biết vị trí thật sự của nó, nên không thể dự đoán vị trí của key tiếp theo.

Other

Inverted Index

Spatial Index

Help me water it