12/08/2018, 17:15

Index - Được và mất

Index là gì? Trong chúng ta chắc chắn ai cũng đã từng xem mục lục của một cuốn sách dù là online hay là offline để tìm kiếm chủ để mình mong muốn nó nhanh hơn bởi vì nó đã được sắp xếp cẩn thận và gọn gàng. Thì index cũng như vậy. Index được ví như là mục lục bởi lẽ khi đánh index vào một column ...

Index là gì?

Trong chúng ta chắc chắn ai cũng đã từng xem mục lục của một cuốn sách dù là online hay là offline để tìm kiếm chủ để mình mong muốn nó nhanh hơn bởi vì nó đã được sắp xếp cẩn thận và gọn gàng. Thì index cũng như vậy. Index được ví như là mục lục bởi lẽ khi đánh index vào một column nào đó thì chúng ta sẽ ngầm hiểu là column đó đã được sắp xếp rồi và làm cho việc chúng ta trở nên nhanh hơn, từ đó làm cho việc truy xuất dữ liệu nhanh hơn.

Đánh index được gì?

  • Khi tạo table có một primary key thì nó cũng đã tự tạo index vào PK này bởi lẽ là do PK này là mã duy nhất đảm bảo tính duy nhất nên việc sắp xếp và tìm kiếm chính xác và nhanh hơn rất nhiều so với việc là column đấy k đảm bảo tính duy nhất.
  • Trong join, order by, group by query cũng yêu cầu truy vẫn dữ liệu liên tục nên việc đánh index giúp cho việc truy xuất nhanh hơn.

Bên cạnh được thì dĩ nhiên chúng ta sẽ có mất.

Những cái mất khi đánh index?

  • Đối với một project có DB(database) bé thì không sao nhưng khi DB lớn thì việc đánh index là rất lâu, bởi lẽ DB lớn thì record cũng lớn mà khi chúng ta đánh index cho 1 table nào đó ví dụ Users thì nó sẽ rất lâu để có thể sắp xếp lại trật tự của bảng Users đó.
  • Index khi sắp xếp cũng tạo ra bảng nên gây tốn tài nguyên => giảm thiểu hiệu năng hoạt động
  • 1 vấn đề quan trọng nữa là đối với create và destroy thì nó sẽ đổi thông tin của 1 record nào đó thì buộc nó pharii sắp xếp lại 1 lân nữa. Như mình đã nói ở trên db nhỏ không sao nhưng đối với db lớn thì việc sắp xếp lại là chuyện khác, nó sắp xếp rất tốn thời gian. Như vậy, khi đánh index thì phải tính toán trước sao cho việc tối ưu hiệu quả nhất.

Các loại index

a. Clustered index

Là lại index được tạo ra khi mà trong bảng có primary key (như đã giải thích ở trên). Trong clustered index thì các record trong table được sắp xếp một cách vật lý nghĩa là được sắp xếp trong thứ tự của bảng chữ cái. Ví dụ chúng ta có 1 bảng là products có 2 trường là ID và name, dĩ nhiên theo quy luật thì ID là PK được đánh clustered index và chúng được sắp xếp theo thứ tự tăng dần của bảng chữ cái và chữ số. Như vậy nếu muốn tìm id thì nó sẽ dò theo khoảng để tìm nhanh hơn.

b. Non-clustered index

là loại index được gắn liền với foreign keys, nó không được sắp xếp theo thứ tự abc mà sắp xếp lung tun không theo trật tự nào. Ở đây chủ yếu là các cột trong câu lệnh điều WHERE, ORDER BY, GROUP BY, hay các foreign key trong querry yêu cầu JOIN thì bạn có thể yên tâm "phán" cho nó cái non-clustered index rồi.

=>>>> Như vậy, mình đã giới thiệu đến các bạn những thứ được và mất của index, hy vọng là các bạn có thể hiểu được và áp dụng vào database của mình sao cho một cách tối ưu nhất có thể, xin cảm ơn các bạn đã đọc!
0