#Notes: Database thì dùng MSSQL hay Oracle nhiều? Trong Database, có tạo qua Index chưa? Tại sao cần dùng Index? Lý do gì Index lại giúp tăng performance truy xuất data trong database ? Dùng index có tác hại gì không?

 Index database là gì?

Index là một cấu trúc dữ liệu được dùng để định vị và truy cập nhanh nhất vào dữ liệu trong các bảng database
Index là một cách tối ưu hiệu suất truy vấn database bằng việc giảm lượng truy cập vào bộ nhớ khi thực hiện truy vấn

Index có thể được tạo cho một hoặc nhiều cột trong database. Index thường được tạo mặc định cho primary key, foreign key.
Ngoài ra, ta cũng có thể tạo thêm index cho các cột nếu cần.

Cụ thể:
- Single-Column Index trong SQL
Chỉ mục cho một cột đơn là một chỉ mục được tạo dựa trên chỉ một cột trong bảng.

CREATE INDEX ten_chi_muc ON ten_bang (ten_cot);

- Unique index trong SQL
Unique index được sử dụng không chỉ để tăng hiệu suất, mà còn cho mục đích toàn vẹn dữ liệu.
Một Unique index không cho phép bất kỳ bản sao giá trị nào được chèn vào trong bảng.

CREATE UNIQUE INDEX ten_chi_muc ON ten_bang (ten_cot);

- Composite Index trong SQL
Composite Index là một chỉ mục cho hai hoặc nhiều cột trong một bảng.

CREATE INDEX ten_chi_muc ON ten_bang (cot1, cot2);

Implicit Index trong SQL
Implicit Index (có thể hiểu là chỉ mục ngầm định) là chỉ mục mà được tạo tự động bởi Database Server khi một đối tượng được tạo.
Các chỉ mục được tạo tự động cho các ràng buộc Primary key và các ràng buộc Unique.


Hai dạng Index Database:
- B-Tree: Dữ liệu index trong B-Tree được tổ chức và lưu trữ theo dạng tree, tức là có root, branch, leaf.
- Hash Index: Dữ liệu index được tổ chức theo dạng Key - Value được liên kết với nhau.

Hai loại Index phổ biến (2 loại này đều thuộc B-Tree):
- Clustered index
Một clustered index (chỉ mục được phân cụm) là một loại tệp sắp xếp thông tin trong bảng về đặc tính của chúng. Chỉ có 1 danh sách cho mỗi bảng trong database. Do đó, chỉ có 1 bản ghi nhóm đơn cho mỗi bảng.
Dưới đây là một vài đặc điểm của clustered index:
+ Lưu trữ data mặc định và lưu trữ data được sắp xếp
+ Giúp lưu trữ data và index cùng một lúc
+ Quét Clustered index và tìm kiếm inde
+ Tra cứu khóa

Ưu điểm:
+ Các clustered index là một option lý tưởng cho range hoặc group nhận được các truy vấn loại tối thiểu, tối đa hoặc đếm (count type queries).
+ Bất kỳ tìm kiếm có liên quan nào sẽ đi thẳng đến một điểm cụ thể trong thông tin với mục tiêu có thể tiếp tục đọc liên tục từ bảng.
+ Sử dụng cơ chế định vị để tìm phần tập tin ở đầu range.
+ Một kỹ thuật hay để các tìm kiếm range khi hunt key được đề cập.
+ Giảm thiểu chuyển trang và tối đa hóa các lần truy cập bộ đệm.

Nhược điểm:
+ Hạn chế di chuyển trang và tăng các tìm kiếm dự trữ.
+ Các phương pháp khác nhau cho yêu cầu không liên tiếp
+ Khiến cho nhiều phần trang nhất quán bao gồm trang thông tin giống như trang danh sách liệt kê.
+ Công việc bổ sung để chèn, cập nhật và xóa trong SQL.
+ Cần nỗ lực lâu hơn để làm mới các hồ sơ.
+ Hầu như tất cả data được chứa trong các nút dẫn của chỉ mục.

- Non-Clusterd Index
Một non-clustered index (chỉ mục không được phân cụm) lưu trữ thông tin meta trong một khu vực, đồng thời lưu trữ các tệp trong khu vực khác. Các tập tin bao gồm các con trỏ đến vị trí của thông tin đó.
Một solitary table (bảng đơn) có thể có nhiều non-bunched records (bản ghi không được nhóm) dưới dạng tệp.
Một non-clustered index được xác định trong trường không theo thứ tự của bảng và loại phương thức này cải thiện hiệu năng của các truy vấn khi chúng sử dụng các khóa không được gán làm khóa chính.
Dưới đây là một vài đặc điểm của clustered index:
+ Chỉ lưu trữ các key values
+ Con trỏ tới các hàng Chỉ mục Heap/Clustered
+ Cho phép truy cập data thứ cấp
+ Kết nối data
+ Hoạt động của Index Scan và Index Seek
+ Tạo một non-clustered index gồm cho bảng hoặc dạng view

Ưu điểm:
+ Giúp lấy dữ liệu nhanh chóng từ bảng database.
+ Giảm chi phí hơn so với clustered index.
+ Có thể được sử dụng để tạo nhiều hơn một chỉ mục vì có nhiều chỉ mục không được nhóm trong RDBMS.

Nhược điểm:
+ Lưu trữ dữ liệu theo thứ tự hợp lý nhất mà không cho phép người dùng tự sắp xếp các hàng data.
+ Quá trình tra cứu trên non-clusterd index khá tốn kém.
+ Cần có bản cập nhật tương ứng mỗi khi clustering key (khoá phân cụm) được cập nhật để lưu nó vào non-clustered index.

Share:

0 nhận xét