Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Những cột nào thường tạo ra các chỉ mục tốt?

Các chỉ mục có thể đóng một vai trò quan trọng trong việc tối ưu hóa truy vấn và tìm kiếm kết quả một cách nhanh chóng từ các bảng. Vì vậy, bước quan trọng nhất là chọn cột nào được lập chỉ mục. Có hai vị trí chính mà chúng ta có thể xem xét lập chỉ mục:các cột được tham chiếu trong mệnh đề WHERE và các cột được sử dụng trong mệnh đề JOIN. Tóm lại, các cột như vậy phải được lập chỉ mục dựa vào đó bạn được yêu cầu để tìm kiếm các bản ghi cụ thể. Giả sử, chúng ta có một bảng có tên là người mua trong đó truy vấn SELECT sử dụng các chỉ mục như bên dưới:

SELECT
 buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal'   /* consider to use index */

Vì "buy_id" được tham chiếu trong phần CHỌN, MySQL sẽ không sử dụng nó để giới hạn các hàng đã chọn. Do đó, không cần thiết phải lập chỉ mục nó. Dưới đây là một ví dụ khác hơi khác so với ví dụ trên:

SELECT
 buyers.buyer_id, /* no need to index */
 country.name    /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
 first_name='Tariq' /* consider to use index */
AND
 last_name='Iqbal' /* consider to use index */

Theo các truy vấn trên first_name, các cột last_name có thể được lập chỉ mục khi chúng nằm trong mệnh đề WHERE. Ngoài ra, một trường bổ sung, country_id từ bảng country, có thể được xem xét để lập chỉ mục vì nó nằm trong mệnh đề JOIN. Vì vậy, lập chỉ mục có thể được xem xét trên mọi trường trong mệnh đề WHERE hoặc mệnh đề JOIN.

Danh sách sau đây cũng cung cấp một số mẹo mà bạn nên ghi nhớ khi có ý định tạo chỉ mục trong bảng của mình:

  • Chỉ lập chỉ mục những cột được yêu cầu trong mệnh đề WHERE và ORDER BY. Việc lập chỉ mục các cột quá nhiều sẽ dẫn đến một số bất lợi.
  • Cố gắng tận dụng tính năng "tiền tố chỉ mục" hoặc "chỉ mục nhiều cột" của MySQL. Nếu bạn tạo một chỉ mục, chẳng hạn như INDEX (first_name, last_name), đừng tạo INDEX (first_name). Tuy nhiên, "tiền tố chỉ mục" hoặc "chỉ mục nhiều cột" không được khuyến nghị trong tất cả các trường hợp tìm kiếm.
  • Sử dụng thuộc tính NOT NULL cho các cột mà bạn coi là lập chỉ mục, để các giá trị NULL sẽ không bao giờ được lưu trữ.
  • Sử dụng tùy chọn --log-long-format để ghi lại các truy vấn không sử dụng chỉ mục. Bằng cách này, bạn có thể kiểm tra tệp nhật ký này và điều chỉnh các truy vấn của mình cho phù hợp.
  • Câu lệnh EXPLAIN giúp bạn tiết lộ rằng MySQL sẽ thực thi một truy vấn như thế nào. Nó chỉ ra cách thức và thứ tự các bảng được nối với nhau. Điều này có thể hữu ích rất nhiều trong việc xác định cách viết các truy vấn được tối ưu hóa và liệu các cột có cần được lập chỉ mục hay không.

Cập nhật (23 tháng 2, 15):

Bất kỳ chỉ mục nào (tốt / xấu) đều làm tăng thời gian chèn và cập nhật.

Tùy thuộc vào chỉ mục của bạn (số lượng chỉ mục và loại), kết quả được tìm kiếm. Nếu thời gian tìm kiếm của bạn sẽ tăng lên do chỉ mục thì đó là chỉ mục xấu.

Có thể trong bất kỳ cuốn sách nào, "Trang chỉ mục" có thể có trang bắt đầu chương, số trang chủ đề bắt đầu, cũng bắt đầu trang chủ đề phụ. Một số giải thích rõ ràng trong trang Chỉ mục sẽ hữu ích nhưng chỉ mục chi tiết hơn có thể khiến bạn bối rối hoặc khiến bạn sợ hãi. Các chỉ mục cũng đang có bộ nhớ.

Lựa chọn chỉ mục nên khôn ngoan. Hãy nhớ rằng không phải tất cả các cột đều yêu cầu chỉ mục.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. freeTDS không sử dụng cấu hình của nó

  2. Khái niệm chính về khóa SQL Server

  3. Làm cách nào để lấy ngày ở định dạng YYYY-MM-DD từ trường ngày giờ TSQL?

  4. Hiệu suất INNER JOIN so với LEFT JOIN trong SQL Server

  5. Các biến phân biệt chữ hoa chữ thường trong SQL Server