sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Statement - Hur kan förbättra hastigheten med indexering

Det här indexet kommer förmodligen att vara till hjälp, men kom ihåg att det inte finns någon gratis lunch (index måste underhållas, så detta kommer att påverka din infoga/uppdatera/ta bort arbetsbelastning):

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;

Nu kan din fråga säga:

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!

Om du ändrar värdena för några av dessa flaggor beroende på frågan, kan du experimentera med att lägga till dessa kolumner till nyckeln till indexet istället för filtret, t.ex. låt oss säga att du ibland letar efter OnHold = 0 och ibland 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;

Du kanske också vill experimentera med att ha MemberMailID i nyckeln istället för INCLUDE . t.ex.:

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;

Dessa skillnader kanske inte spelar någon roll för dina data och dina användningsmönster, men du kommer att kunna testa skillnader lättare än vi kan gissa.



  1. MySQL GROUP EFTER åldersintervall inklusive nollintervall

  2. 3 sätt att säkerhetskopiera en SQLite-databas

  3. Kontrollera och returnera värden från databasen

  4. Linq to Entities Group By (OUTTER APPLY) oracle 11.2.0.3.0 stöder inte applicera