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

Tôi có nên lập chỉ mục một trường bit trong SQL Server không?

Hãy xem xét chỉ mục là gì trong SQL - và chỉ mục thực sự là một phần bộ nhớ trỏ đến các phần bộ nhớ khác (tức là con trỏ đến các hàng). Chỉ mục được chia thành các trang để các phần của chỉ mục có thể được tải và tải xuống từ bộ nhớ tùy thuộc vào cách sử dụng.

Khi bạn yêu cầu một tập hợp các hàng, SQL sử dụng chỉ mục để tìm các hàng nhanh hơn so với việc quét bảng (xem mọi hàng).

SQL có các chỉ mục được phân cụm và không phân cụm. Hiểu biết của tôi về các chỉ mục được phân nhóm là chúng nhóm các giá trị chỉ mục tương tự vào cùng một trang. Bằng cách này khi bạn yêu cầu tất cả các hàng khớp với một giá trị chỉ mục, SQL có thể trả về các hàng đó từ một trang bộ nhớ được phân nhóm. Đây là lý do tại sao cố gắng phân cụm chỉ mục một cột GUID là một ý tưởng tồi - bạn không cố gắng phân cụm các giá trị ngẫu nhiên.

Khi bạn lập chỉ mục một cột số nguyên, chỉ mục của SQL chứa một tập hợp các hàng cho mỗi giá trị chỉ mục. Nếu bạn có phạm vi từ 1 đến 10, thì bạn sẽ có 10 con trỏ chỉ mục. Tùy thuộc vào số lượng hàng có, điều này có thể được phân trang khác nhau. Nếu truy vấn của bạn tìm kiếm chỉ mục phù hợp với "1" và sau đó trong đó Tên chứa "Fred" (giả sử cột Tên không được lập chỉ mục), SQL sẽ lấy tập hợp các hàng phù hợp với "1" rất nhanh, sau đó quét bảng để tìm phần còn lại.

Vì vậy, những gì SQL thực sự đang làm là cố gắng giảm tập hợp làm việc (số hàng) mà nó phải lặp lại.

Khi bạn lập chỉ mục một trường bit (hoặc một số phạm vi hẹp), bạn chỉ giảm tập hợp làm việc theo số hàng phù hợp với giá trị đó. Nếu bạn có một số lượng nhỏ các hàng phù hợp, nó sẽ làm giảm tập hợp làm việc của bạn rất nhiều. Đối với một số lượng lớn các hàng có phân phối 50/50, nó có thể giúp bạn tăng hiệu suất rất ít so với việc giữ cho chỉ mục được cập nhật.

Lý do mà mọi người nói là kiểm tra là vì SQL chứa một trình tối ưu hóa rất thông minh và phức tạp có thể bỏ qua một chỉ mục nếu nó quyết định việc quét bảng nhanh hơn, hoặc có thể sử dụng sắp xếp, hoặc có thể sắp xếp các trang bộ nhớ, tuy nhiên nó rất thích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thực hiện tìm kiếm phân biệt chữ hoa chữ thường trong mệnh đề WHERE (Tôi đang sử dụng SQL Server)?

  2. Cách ngăn chặn tấn công SQL Injection bằng cách bảo mật

  3. 4 Chức năng để định dạng một số thành 2 vị trí thập phân trong SQL Server

  4. Trước tiên, ánh xạ các khóa tổng hợp bằng mã EF

  5. Cách tạo dữ liệu kiểm tra trong SQL Server