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

Câu lệnh SQL - Cách cải thiện tốc độ với lập chỉ mục

Chỉ mục này có thể hữu ích, nhưng hãy nhớ rằng không có bữa trưa miễn phí (chỉ mục phải được duy trì, vì vậy điều này sẽ ảnh hưởng đến khối lượng công việc chèn / cập nhật / xóa của bạn):

CREATE NONCLUSTERED INDEX unread_emails
  ON dbo.MemberMail(ToMemberID)
  INCLUDE (MemberMailID)
  WHERE ToReadFlag = 0
  AND ToDeletedFlag = 0
  AND FromDeletedFlag = 0
  AND OnHold = 0
  AND ToArchivedFlag = 0;

Bây giờ truy vấn của bạn có thể nói:

SELECT TOP (1) MemberMailID
  FROM dbo.MemberMail -- dbo prefix
    WITH (INDEX (unread_emails)) -- in case you need to force, though you should not
WHERE ToMemberID = 102
AND ToReadFlag = 0
AND ToDeletedFlag = 0
AND FromDeletedFlag = 0
AND OnHold = 0
AND ToArchivedFlag = 0
ORDER BY ToMemberID; -- ORDER BY is important!

Nếu bạn thay đổi giá trị của một số cờ này tùy thuộc vào truy vấn, bạn có thể thử nghiệm với việc thêm các cột đó vào khóa của chỉ mục thay vì bộ lọc, ví dụ:giả sử đôi khi bạn kiểm tra OnHold = 0 và đôi khi OnHold = 1 :

CREATE NONCLUSTERED INDEX unread_emails
  ON dbo.MemberMail(ToMemberID, OnHold)
  INCLUDE (MemberMailID)
  WHERE ToReadFlag = 0
  AND ToDeletedFlag = 0
  AND FromDeletedFlag = 0
  AND ToArchivedFlag = 0;

Bạn cũng có thể muốn thử nghiệm với việc có MemberMailID trong khóa thay vì INCLUDE . ví dụ:

CREATE NONCLUSTERED INDEX unread_emails
  ON dbo.MemberMail(ToMemberID, MemberMailID)
  WHERE ToReadFlag = 0
  AND ToDeletedFlag = 0
  AND FromDeletedFlag = 0
  AND OnHold = 0
  AND ToArchivedFlag = 0;

Những khác biệt này có thể không quan trọng đối với dữ liệu và cách sử dụng của bạn, nhưng bạn sẽ có thể kiểm tra sự khác biệt dễ dàng hơn chúng ta có thể đoán đượ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. UPSERT nguyên tử trong SQL Server 2005

  2. Thuật toán T-SQL để mã hóa các ký tự HTML không an toàn dưới dạng tham chiếu thực thể ký tự HTML

  3. Sử dụng CASE để trả về một chuỗi nếu không có kết quả từ câu lệnh SELECT

  4. Giới thiệu về bảng tạm thời trong SQL Server

  5. Cách xuất dữ liệu máy chủ SQL từ bảng sang tệp CSV