sql >> Database >  >> RDS >> Sqlserver

SQL-instructie - Hoe kan ik de snelheid verbeteren met indexeren?

Deze index zal waarschijnlijk nuttig zijn, maar houd er rekening mee dat er geen gratis lunch is (indexen moeten worden onderhouden, dus dit heeft invloed op uw werklast voor invoegen/bijwerken/verwijderen):

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 uw vraag zeggen:

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!

Als u de waarden van sommige van deze vlaggen wijzigt, afhankelijk van de zoekopdracht, kunt u experimenteren met het toevoegen van die kolommen aan de sleutel van de index in plaats van aan het filter, b.v. laten we zeggen dat u soms controleert op OnHold = 0 en soms 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;

U kunt ook experimenteren met MemberMailID in de sleutel in plaats van de INCLUDE . bijv.:

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;

Deze verschillen zijn misschien niet van belang voor uw gegevens en gebruikspatronen, maar u kunt verschillen gemakkelijker testen dan we kunnen raden.



  1. MySQL-afronding naar de dichtstbijzijnde 5 cent

  2. Hoe Hibernate Batch-insert werkt?

  3. Gegevens opmaken om een ​​bepaalde kleur te hebben

  4. Kan ik LINEFEED als scheidingsteken gebruiken in de CONCAT_WS-functie van mySQL?