Tìm hiểu về Indexes trong MySQL

Như đã biết, Indexes được sử dụng nhằm tăng tốc độ truy vấn dữ liệu từ database.

Xét trong một lần truy suất dữ liệu. Nếu trong một table không sử dụng Indexes, MySQL sẽ phải quét toàn bộ table nhằm tìm ra những record có liên quan (điều kiện sử dụng sau mệnh đề WHERE). Với những table có lượng dữ liệu lớn thì việc này tốn rất nhiều thời gian. Nếu table được sử dụng Indexes, MySQL sẽ biết chính xác những record nào cần mà không phải quét toàn bộ table, từ đó rút ngắn thời gian truy vấn dữ liệu xuống rất nhiều.

Sau đây chúng ta sẽ nói về sự khác nhau giữa các loại Indexes trong MySQL:

  • PRIMARY: Indexes này là duy nhất trong bảng và trong một row không cho phép giá trị của một column nào đó là NULL. Giá trị của các row phải là duy nhất. Indexes này có thể tạo cho 1 hoặc nhiều column trong table.
  • UNIQUE: Cơ bản giống với tính chất của PRIMARY Indexes, nhưng khác ở chỗ cho phép giá trị NULL.
  • INDEX (KEY): đây là loại Indexes không đòi hỏi tính ràng buộc giống như PRIMARY và UNIQUE, nó cho phép giá trị của row có thể trùng lặp.
  • FULLTEXT: Nó khác với 3 loại kể trên, loại Indexes này chỉ sử dụng cho những column chứa giá trị text. Indexes chia nhỏ giá trị text ra thành từ WORD rồi tạo indexes cho từng WORD này. Điều này khiến quá trình tìm kiếm text nhanh hơn rất nhiều.

Tất cả các Indexes kể trên được sử dụng cấu trúc dạng B-Tree hoặc Hash tùy thuộc vào người dùng định nghĩa và store engine hỗ trợ. Vấn đề này sẽ được trình bày riêng trong một bài viết khác.