Chỉ mục (index) trong MySQL

(Ngày: 11/12/2019)
Chỉ mục (index) trong MySQL sẽ có thể cải thiện tốc độ của các hoạt động trong một bảng. Ngay sau đây hãy cùng tìm hiểu về chỉ mục (index) và cách sử dụng của nó.

Chỉ mục (index) trong MySQL là gì?

Chỉ mục (index) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng đẻ tăng nhanh thời gian và hiệu suất thu thập dữ liệu. Hay hiểu đơn giản hơn là một con trỏ tới dữ liệu trong một bảng. Một chỉ mục trong một Database là tương tự như một chỉ mục trong mục lục của cuốn sách.

Khi nào cần đánh chỉ mục cho bảng

Bất cứ khi nào bạn thay đổi cấu trúc bảng dữ liệu, bạn đều cần Add index lại, giống như bạn thay đổi nội dung quyển sách, bạn cần phải làm mục lục. Chú ý rằng nếu database của bạn sử dụng insert hay update nhiều hơn select thì index chỉ làm chậm thêm mà thôi.

Lưu ý:

Index giống như các tab. Chúng làm cho nó nhanh hơn nhưng bạn có thể tìm thấy những dữ liệu bạn cần phù hợp với một số tiêu chí nhất định. Để tạo chỉ mục tốt, bạn cần suy nghĩ về cách bạn sẽ được truy vấn dữ liệu như thế nào. Khi bạn có thông tin này, bạn có thể tạo index và nó sẽ tăng tốc độ truy vấn của bạn ngay lập tức.

>> Xem thêm: MySQL là gì? Xây dựng và thiết kế cơ sở dữ liệu với MySQL 

Các loại index trong MySQL

MySQL cung cấp 3 kiểu index khác nhau cho data đó là B-Tree, Hash và R-Tree index.

B-Tree Index

  • Dữ liệu index trong B-Tree được tổ chức và lưu trữ theo dạng cây. Tức là có root, branch, leaf. Giá trị của các node được tổ chức tăng dần từ trái qua phải.
  • Khi truy vấn dữ liệu thì việc tìm kiếm trong B-Tree là 1 quá trình đệ quy, bắt đầu từ root node và tìm kiếm tới branch và leaf, đến khi tìm được tất cả dữ liệu thỏa mãn với điều kiện truy vấn thì mới dừng lại.
  • B-Tree index được sử dụng cho những column trong bảng khi muốn tìm kiếm 1 giá trị nằm trong khoảng nào đó.

Hash Index

  • Hash index có một vài đặc điểm khác biệt so với B-Tree Index.
  • Dữ liệu index được tổ chức theo dạng key – value được liên kết với nhau.
  • Khác với B-Tree, Hash index chỉ nên sử dụng trong các biểu thức toán tử là = và <>. Không sử dụng cho toán từ tìm kiếm 1 khoảng giá trị như > hay <.
  • Không thể tối ưu hóa toán tử ORDER BY bằng việc sử dụng Hash index bởi nó không thể tìm kiếm được phần tử tiếp theo trong Order.
  • Toàn bộ nội dung của Key được sử dụng để tìm kiếm giá trị records. Khác với B-Tree một phần của node cũng có thể được sử dụng để tìm kiếm.
  • Hash có tốc độ nhanh hơn kiểu B-Tree.

Ngoài ra, việc chọn index theo kiểu B-Tree hay Hash còn phụ thuộc vào việc Storage Engine có hỗ trợ loại index đó hay không.

Cách sử dụng index

Tạo index trên một bảng:

CREATE UNIQUE INDEX index_name

ON table_name;

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 trong bảng.

Tạo index cho cột được chỉ rõ trong bảng:

CREATE UNIQUE INDEX index_name

ON table_name(column 1, column 2,...);

Lưu ý:

Trong trường hợp không chỉ rõ tên column được đánh index trong bảng, MySQL sẽ mặc định đánh index trên primary key hoặc các ràng buộc mang tính duy nhất trong bảng database.

Các lệnh thêm index:

  1. Thêm index cho bảng, với index mang tính duy nhất và không thể null

ALTER TABLE tbl_name ADD PRIMARY KEY (olumn 1, column 2,..)

  1. Thêm index cho bảng, với index mang tính duy nhất nhưng có thể null

ALTER TABLE tbl_name ADD UNIQUE index_name (column 1, column 2,..)

  1. Thêm index cho bảng, có thể trùng lặp

ALTER TABLE tbl_name ADD INDEX index_name (column 1, column 2,..)

  1. Thêm index đặc biệt thường cho tìm kiếm văn bản

ALTER TABLE tbl_name ADD FULLTEXT index_name (column 1, column 2,..)

Các lệnh xóa index:

Một chỉ mục có thể bị xóa bởi sử dụng lệnh DROP INDEX trong SQL. Bạn nên cẩn thận trong khi xóa một chỉ mục bởi khi đó hiệu suất có thể chậm hơn hoặc không được cải thiện.

Cú pháp cơ bản của lệnh DROP INDEX:

DROP INDEX index_name;

Một số lưu ý khi sử dụng chỉ mục

Mặc dù các chỉ mục (index) nhằm mục đích để nâng cao hiệu suất của database. Nhưng đôi khi bạn cũng nên tránh dùng chúng. Dưới đây sẽ là một số điểm cần xem xét để quyết định có nên sử dụng chỉ mục hay không:

  • Các chỉ mục không nên được sử dụng các bảng nhỏ.
  • Bảng mà thường xuyên có các hoạt động update, insert.
  • Các chỉ mục không nên được sử dụng trên các cột mà chứa một số lượng lớn giá trị NULL.
  • Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi.

Chúc bạn thành công!

>> Bài viết liên quan: Sử dụng index trong MySQL

viblo.asia