Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja SQL - Jak zwiększyć szybkość indeksowania?

Ten indeks prawdopodobnie będzie pomocny, ale pamiętaj, że nie ma darmowego lunchu (indeksy muszą być utrzymywane, więc wpłynie to na obciążenie wstawiania/aktualizowania/usuwania):

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;

Teraz Twoje zapytanie może brzmieć:

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!

Jeśli zmienisz wartości niektórych z tych flag w zależności od zapytania, możesz poeksperymentować z dodaniem tych kolumn do klucza indeksu zamiast filtra, np. powiedzmy, że czasami sprawdzasz, czy OnHold = 0 a czasami 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;

Możesz także poeksperymentować z posiadaniem MemberMailID w kluczu zamiast INCLUDE . np.:

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;

Różnice te mogą nie mieć znaczenia dla Twoich danych i wzorców użytkowania, ale będziesz mógł je przetestować łatwiej, niż jesteśmy w stanie zgadnąć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest datetime2?

  2. Zapytanie SQL wypełniania zasobnika CTE

  3. Błąd funkcji agregującej podczas używania klauzuli group by w SQL

  4. SQL — przestaw wiele kolumn bez agregatów

  5. T-SQL:Jak wybrać wartości z listy wartości, których NIE MA W tabeli?