Index (Chỉ Mục ) Trong SQL

717 lượt xem

Index trong SQL là một công cụ quan trọng giúp truy vấn dữ liệu nhanh chóng, từ đó nâng cao năng suất làm việc và rút ngắn thời gian thực thi. Bài viết này sẽ giải thích chi tiết về tính chất và sự khác biệt của index so với các lệnh khác trong SQL.

Index là một trong những công cụ truy vấn dữ liệu cần thiết mà những người làm việc trong lĩnh vực dữ liệu cần nắm vững. Nó giúp rút ngắn thời gian truy vấn, mang lại hiệu quả làm việc cao hơn. Vậy Index trong SQL là gì? Hãy cùng tìm hiểu chi tiết trong bài viết này.

Index Trong SQL Là Gì?

Index (chỉ mục) là các bảng tra cứu đặc biệt được công cụ tìm kiếm cơ sở dữ liệu sử dụng để tăng tốc độ truy xuất dữ liệu. Một index có thể hiểu đơn giản là một tham chiếu đến dữ liệu trong một bảng. Index trong cơ sở dữ liệu tương tự như một chỉ mục ở mặt sau của một tạp chí. Trong vai trò người dùng, bạn không thể xem các chỉ mục và chỉ được sử dụng để tăng tốc độ truy cập cơ sở dữ liệu.

Index trong SQL là gì ?
Index trong SQL là gì ?

Ví dụ: Tìm kiếm thông tin trong sách bằng mục lục giúp bạn nhanh chóng đến trang cụ thể. Index trong SQL cũng vậy, ngăn chặn sự lặp lại dữ liệu và cải thiện hiệu suất truy vấn, đặc biệt với bảng dữ liệu lớn. Clustered Index là loại phổ biến, thường tự động tạo với khóa chính trong SQL Server.

Các Kiểu Index Có trong SQL

  • Single-Column Index
  • Unique Index
  • Composite Index
  • Implicit Index

Để tạo một chỉ mục ta sử dụng lệnh CREATE INDEX, bạn có thể đặt tên cho chỉ mục, xác định bảng, các cột muốn lập chỉ mục và xác định chỉ mục là theo thứ tự tăng dần hoặc giảm dần.

Lệnh CREAT INDEX Trong SQL

Lệnh tạo index trong SQL được thiết kế để nâng cao hiệu quả truy xuất dữ liệu từ bảng, ngay cả khi bảng chứa dữ liệu trùng lặp. Index giúKip tối ưu hóa quá trình truy vấn bằng cách chỉ dẫn trực tiếp đến vị trí lưu trữ dữ liệu trong cơ sở dữ liệu.

Hãy tưởng tượng bạn đang tìm kiếm một phần thông tin nhất định trong một cơ sở dữ liệu lớn. Mà không có index, hệ thống sẽ phải kiểm tra từng hàng một, làm tăng thời gian truy vấn đáng kể, đặc biệt nếu thông tin bạn cần nằm ở cuối cơ sở dữ liệu.

Cú pháp cơ bản để tạo CREATE INDEX

 CREATE INDEX name_of_Index ON name_Of_Table(thuộc tính 1, thuộc tính 2,...);

Ví dụ:

 CREATE INDEX ind_A on customer(tall,thin);

Giải thích:

Chúng ta có thể tạo danh sách được sắp xếp bằng cách sử dụng các chỉ mục trong SQL thay vì phải tạo các bảng mới được sắp xếp theo yêu cầu dữ liệu, việc này sẽ chiếm nhiều dung lượng lưu trữ.

  • INDEX là từ khóa chỉ định việc tạo chỉ mục.
  • “ind_A” là tên chỉ mục.
  • “customer” là tên bảng.

Trong ví dụ trên, ind_A đã được tạo với các trường “tall” và “thin” từ bảng của “customer”.

Chỉ Mục SINGLE-COLUMN

Single-Column Index được tạo cho duy nhất 1 cột trong bảng. Cú pháp cơ bản như sau:

CREATE INDEX ten_index
ON ten_bang (ten_cot);

Unique INDEX Trong SQL

Chỉ mục duy nhất (Unique Index) được sử dụng để tăng hiệu suất truy vấn và đảm bảo tính toàn vẹn dữ liệu bằng cách không cho phép các giá trị trùng lặp trong cột chỉ mục. Cú pháp cơ bản để tạo một chỉ mục duy nhất là:

CREATE UNIQUE INDEX ten_index
ON ten_bang (ten_cot);

Chỉ Mục COMPOSITE

Composite Index là chỉ mục kết hợp dành cho hai hoặc nhiều cột trong một bảng. Cú pháp cơ bản của nó như sau:

CREATE INDEX ten_index
ON ten_bang (cot1, cot2);

Lưu ý :

Việc tạo Single-Column Index hay Composite Index phụ thuộc vào tần suất sử dụng mệnh đề WHERE trong truy vấn như là điều kiện bộ lọc.

Nếu chỉ sử dụng một cột, thì lựa chọn tốt nhất là Single-column Index. Nếu hai hoặc nhiều cột được sử dụng thường xuyên trong mệnh đề WHERE như các bộ lọc, thì Composite Index là lựa chọn tối ưu hơn.

IMPLICIT INDEX

Index implicit là các chỉ mục được tạo tự động bởi máy chủ cơ sở dữ liệu khi một bảng được tạo ra. Các chỉ mục này được thiết lập tự động cho các ràng buộc Primary key và Unique, giúp cải thiện hiệu suất truy vấn mà không cần can thiệp thủ công từ người dùng.

Lệnh DROP INDEX Trong SQL

Lệnh DROP trong SQL thường được sử dụng để xóa chỉ mục trên bảng dữ liệu đã chỉ định. Bạn có thể xóa nhiều bảng cùng một lúc.

Cú pháp cơ bản để tạo DROP INDEX:

 DROP INDEX name_of_index on Table_name;

Ví dụ

 DROP INDEX Idx_Customer_Index_CustomerID
ON Sales.Customer_Index

Cách Phân Biệt Giữa VIEW Và INDEX

VIEW trong SQL 

  • VIEW cho phép xem dữ liệu của một hoặc nhiều cột cụ thể trong bảng.
  • VIEW chứa dữ liệu logic của bảng cơ sở (base table), trong khi bảng cơ sở lưu trữ dữ liệu thực tế (dữ liệu vật lý). Nói cách khác, VIEW giống như một cửa sổ thông qua đó bạn có thể xem hoặc thay đổi dữ liệu.
  • VIEW có thể kết hợp dữ liệu từ nhiều bảng thông qua các bộ tiêu chí chung và có thể được sử dụng trong bất kỳ câu lệnh SELECT nào như bảng.
  • VIEW cung cấp bảo mật cho dữ liệu và bảng cơ sở dữ liệu. Nếu một bảng bị xóa, không thể khôi phục lại, nhưng nếu VIEW bị xóa, VIEW có thể được tạo lại dễ dàng.
View trong SQL
View trong SQL

INDEX trong SQL 

  • INDEX được sử dụng để tăng tốc độ tìm kiếm dữ liệu.
  • INDEX là các con trỏ chỉ đến địa chỉ vật lý của dữ liệu.
  • INDEX có thể được tạo trên một hoặc nhiều cột của bảng cơ sở dữ liệu.
  • Một bảng có thể chứa nhiều INDEX, giúp cải thiện hiệu suất truy vấn.
Index trong SQL
Index trong SQL

Phân Biệt Lệnh DELETE, DROP

DELETE 

  • DELETE là lệnh DML (Data Manipulation Language).
  • Cú pháp: DELETE FROM table_name WHERE (conditions);
  • Cho phép xóa một hoặc nhiều bản ghi khỏi bảng dựa trên các điều kiện đã chỉ định.
  • Không giải phóng không gian lưu trữ được phân bổ của bảng, chỉ xóa dữ liệu trong bảng.
  • Thời gian thực thi chậm hơn lệnh DROP vì nó xóa từng hàng một.

DROP 

  • DROP là lệnh DDL (Data Definition Language).
  • Cú pháp: DROP INDEX name_of_index ON table_name;
  • Hoàn toàn loại bỏ bảng hoặc index khỏi cơ sở dữ liệu.
  • Giải phóng hoàn toàn không gian lưu trữ được phân bổ cho bảng hoặc index khỏi bộ nhớ.
  • Nhanh hơn DELETE vì nó xóa toàn bộ bảng hoặc index mà không cần xử lý từng hàng.

Ưu Và Nhược Điểm Của Việc Sử Dụng

Ưu Điểm

  • Index giúp tăng tốc độ truy vấn dữ liệu trong cơ sở dữ liệu, cải thiện hiệu suất truy vấn.
  • Index đảm bảo tính duy nhất của các hàng thông qua các chỉ mục như primary key và unique key.
  • Có thể thực hiện kiểm tra các giá trị chuỗi (string) bằng cách sử dụng chỉ mục toàn văn bản (full-text index) để tìm kiếm từ trong câu.

Nhược Điểm

  • Các chỉ mục chiếm dụng dung lượng lưu trữ đáng kể trong cơ sở dữ liệu.
  • Index có thể làm chậm các lệnh như INSERT, UPDATE và DELETE vì các chỉ mục cần được cập nhật sau mỗi thao tác. Tuy nhiên, lệnh UPDATE có thể được tăng tốc nếu điều kiện WHERE sử dụng trường được lập chỉ mục.

Cách Tạo INDEX Trong PostgreSQL.

Để tạo chỉ mục trong PostgreSQL ta dùng câu lệnh:

CREATE INDEX ten_index ON [TABLE NAME] (COLUMN1, COLUMN2, ...)

Nếu muốn tạo chỉ mục độc nhất (không cho phép chèn dữ liệu trùng lặp nào vào bảng):

CREATE UNIQUE INDEX ten_index ON [TABLE NAME] (COLUMN1, COLUMN2, …)

Khi không cần dùng index nữa có thể xóa theo cú pháp:

DROP INDEX ten_index

Khi Nào Sử Dụng INDEX ?

Index là một công cụ quan trọng giúp tăng tốc đáng kể việc truy vấn dữ liệu, đặc biệt khi xử lý các câu lệnh SELECT có điều kiện trên các bảng dữ liệu lớn và thường xuyên được sử dụng. Tuy nhiên, việc quyết định khi nào nên sử dụng index và chọn cột nào để tạo index không phải lúc nào cũng dễ dàng, phụ thuộc rất nhiều vào tình huống cụ thể.

Dưới đây là một số quy tắc chung thường được áp dụng khi lựa chọn cột (hoặc tập hợp các cột) để tạo index:

  • Không tạo index cho khóa chính và cột giá trị duy nhất: Hệ quản trị cơ sở dữ liệu thường tự động tạo index cho các cột này.
  • Tạo index cho cột thường xuyên sử dụng: Lợi ích lớn khi tần suất sử dụng cao.
  • Hiệu quả với bảng có số lượng bản ghi lớn: Với bảng nhỏ, index có thể không mang lại lợi ích đáng kể.
  • Chú ý tốc độ tăng trưởng dữ liệu: Thêm, sửa, xóa bản ghi sẽ chậm lại do index cần cập nhật.
  • Quản lý không gian bộ nhớ: Index chiếm dụng không gian bộ nhớ, cần cân nhắc kỹ.
  • Xem xét tính đa dạng của dữ liệu: Cột nhiều giá trị riêng biệt tăng tốc độ truy vấn đáng kể.

Việc sử dụng index cần sự cân nhắc kỹ lưỡng giữa nhiều yếu tố để tối ưu hóa hiệu suất truy vấn dữ liệu.

Khi Nào Nên Tránh Sử Dụng INDEX

Mặc dù việc sử dụng INDEX nhằm mục đích nâng cao hiệu suất của cơ sở dữ liệu, nhưng đôi khi bạn nên xem xét tránh dùng chúng. Dưới đây là một số trường hợp cụ thể:

  • Tránh sử dụng INDEX trong các bảng nhỏ, ít bản ghi vì lợi ích hiệu suất không đáng kể.
  • Tránh sử dụng INDEX trong các bảng có tần suất cập nhật (UPDATE) và chèn (INSERT) cao, vì việc duy trì INDEX có thể làm giảm hiệu suất tổng thể.
  • Tránh sử dụng INDEX cho các cột chứa nhiều giá trị NULL, vì chúng không tối ưu hóa được việc tìm kiếm.
  • Tránh sử dụng INDEX cho các cột thường xuyên bị thay đổi, vì việc cập nhật INDEX sẽ làm giảm hiệu suất của các thao tác chỉnh sửa.

Tại Sao Trong SQL Server Quan Trọng?

Tạo chỉ mục là một kỹ thuật quan trọng trong lập trình SQL, giúp tăng cường hiệu suất truy vấn và quản lý dữ liệu, đặc biệt trong các bảng lớn với hàng trăm nghìn bản ghi trở lên. Dù phổ biến, việc hiểu rõ khi nào và ở đâu sử dụng chỉ mục để cải thiện hiệu quả truy vấn và quá trình lưu trữ là điều không phải ai cũng làm được.

Dưới đây là một số trường hợp cụ thể về việc sử dụng chỉ mục và lợi ích của nó:

  • Khi bạn thực hiện truy vấn trên bảng dữ liệu lớn, việc quét toàn bộ bảng có thể tiêu tốn nhiều thời gian và gây ra việc chờ đợi kéo dài trên máy chủ. Để khắc phục, bạn nên sử dụng tùy chọn giải thích truy vấn để hiểu rõ cách thức truy vấn được thực thi, xác định các cột nào đang được sử dụng và liệu chúng có tạo ra nguy cơ lặp lại không, giúp tối ưu hóa quá trình truy vấn.
  • Việc xác định thứ tự của chỉ mục cũng rất quan trọng để cải thiện hiệu suất. Bằng cách tạo chỉ mục theo đúng thứ tự, bạn có thể đẩy nhanh tốc độ truy vấn và giảm thiểu thời gian chờ đợi.

Việc sử dụng và quản lý chỉ mục một cách hiệu quả có thể làm thay đổi đáng kể tốc độ và hiệu suất của các truy vấn SQL, giúp cho quá trình lập trình trở nên mạnh mẽ và linh hoạt hơn.

Tầm quan trọng Index trong SQL
Tầm quan trọng Index trong SQL

Các Câu Hỏi Thường Gặp

Index có tự động được tạo khi tạo bảng không?

Không phải tất cả các Index đều được tạo tự động. Chỉ có Primary Key Index được tạo tự động khi bạn xác định một khóa chính.

Làm thế nào để xem các index hiện có trong một bảng?

Có thể sử dụng lệnh sau để liệt kê các index hiện có trong một bảng:

SHOW INDEX FROM table_name;

Sự khác biệt giữa clustered index và non-clustered index là gì?

lustered index thay đổi thứ tự vật lý của các hàng trong bảng theo thứ tự của index, trong khi non-clustered index chỉ tạo ra một bản sao của các cột được chọn và sử dụng một con trỏ để trỏ tới vị trí của hàng.

Làm thế nào để tối ưu hóa index trong SQL?

Một số cách để tối ưu hóa index trong SQL bao gồm:
  • Chỉ tạo index trên các cột thực sự cần thiết: Tránh việc tạo quá nhiều index không cần thiết.
  • Xóa các index không sử dụng: Giảm không gian lưu trữ và cải thiện hiệu suất ghi.
  • Phân tích truy vấn: Sử dụng công cụ phân tích truy vấn để xác định các truy vấn chậm và tối ưu hóa chúng với các index phù hợp.

Kết Luận

Bài viết trên đã giải thích chi tiết về Index trong SQL, kèm theo các ví dụ cụ thể. Ngoài ra, chúng tôi còn liệt kê một số lệnh tương tự thường gây nhầm lẫn với lệnh Index. Hy vọng qua bài viết này, bạn đã có thể nắm được cơ bản về tính chất và cách hoạt động của Index trong SQL.