SQL Series: Tăng tốc query của bạn với Indexes

625

Bạn có thể tưởng rằng… Database cũng giống như thư viện.

và các table giống như sách trong thư viện.

Trong khi đó, các hàng (row) chính là các trang của một cuốn sách.

Lật qua một cuốn sách để tìm kiếm một trang bạn cần sẽ tốn khá nhiều thời gian. Tương tự, khi bạn phải quét tìm kiếm với hàng triệu row trong một table sẽ vô cùng tốn thời gian và tẻ nhạt. Đây chính là lúc mà index tỏa sáng.

Vì sao chúng ta lại cần tới index?

Indexes speed up performance by either ordering the data on disk so it’s quicker to find your result or telling the SQL engine where to go to find your data. If you don’t apply an index, the SQL engine will scan through every row one by one.

While this isn’t necessarily a bad thing, as your database grows things could start to slow down.

Index giúp tăng tốc hiệu suất bằng cách sắp đặt các hàng dữ liệu để giúp việc tìm kiếm kết quả được nhanh hơn hoặc nói cho công cụ SQL biết phải tìm dữ liệu của bạn ở đâu. Nếu bạn không áp dụng một index, công cụ SQL sẽ quét qua từng hàng một.

Mặc dù điều này không nhất thiết là một điều xấu, nhưng khi cơ sở dữ liệu của bạn bành trướng về qui mô thì mọi thứ có thể bắt đầu chậm lại.

Có bao nhiêu loại index?

Có 2 loại chính trong SQL Server:

Clustered Index – trang nội dung

  • Trực tiếp sắp xếp dữ liệu trên đĩa theo cách khiến cho việc truy cập dữ liệu nhanh hơn.
  • Bạn chỉ có thể áp dụng một index cho mỗi bảng vì dữ liệu chỉ có thể được đặt hàng theo một cách.

indexes1

Non-clustered Index

  • Chỉ điểm đến tới nơi dữ liệu cần thiết.
  • Bạn có thể tạo tối đa 999 nhưng vì mỗi index đều cần phải được bảo trì, có thể bạn sẽ chỉ muốn chỉ cần một vài cái thôi.

indexes2

Tôi có thể kiếm index ở đâu sau khi được tạo ra?

Bạn có thể tìm thấy các index trong một table bằng cách mở rộng table ở vị trí chứa index.

indexes3

Đây cũng là nơi bạn có thể tạo index bằng wizard. Trong ví dụ dưới đây, phần option cho Clustered Index giờ sẽ không còn xài được vì chúng ta đã có nó trong table rồi.

indexes4

Những đối tượng nào thích hợp cho index?

Các cột ID, tên, số tài khoảng, etc. Lí tưởng nhất là những gì độc đáo, tuần tự và nhỏ mà bạn đang sử dụng trong SELECTsJOINs.

Giới tính, năm, và quốc tịch lại không phải là lựa chọn lí tưởng. Bạn chỉ nên áp dụng index cho những cột mà bạn phải query thường xuyên.

Tôi không thể làm việc này sau à?

Tất nhiên là được. Đôi khi bạn nên query data trước rồi sau đó mới thêm index vào.

Nhưng nếu bạn không hề có index trong table chứa data. Việc này sẽ dẫn tới hiện tượng “Heaped Storage” – tốn nhiều bộ nhớ để lưu chữ một spreadsheet.

Lưu ý rằng áp dụng index sẽ mất thời gian nếu table của bạn có qui mô lớn.

Tôi có thật sự cần tới nó không?

Hoàn toàn tùy thuộc vào mục đích cũng như điều bạn cần. Lợi thế của việc không thêm index là INSERTs và UPDATEs của bạn sẽ nhanh hơn cũng như database cũng bạn cũng sẽ luôn nhỏ hơn.

Nếu bạn thấy mọi thứ đang bị chậm lại, hãy thử kiểm tra phần Execution Plan cho thông tin về những nơi tốn nhiều công sức để thực hiện query của bạn.

 

indexes5

Bao nhiêu Index là quá nhiều?

Tương tự, nó thật sự tùy vào bạn. Quá nhiều index sẽ làm chậm hiệu năng. Khi bạn đã tạo index cho Primary Key và Unique Keys thì mọi thứ còn lại tùy vào bạn, hãy xem Execution Plan và quyết định mình nên làm gì tiếp theo.

Đây có phải là giải pháp giúp cải thiện hiệu năng không?

Indexes luôn cần được bảo trì. Chúng có thể cải thiện hiệu năng lúc đầu nhưng cần phải được review, update và bảo dưỡng mỗi khi database của bạn mở rộng. Vì vậy hãy dùng tới Execution Plan để xem những điều cần thiết mà bạn nên thực hiện.

Techtalk via Dev.to

CHIA SẺ