Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL израз - Как може да се подобри скоростта с индексиране

Този индекс вероятно ще бъде полезен, но имайте предвид, че няма безплатен обяд (индексите трябва да се поддържат, така че това ще повлияе на натоварването ви при вмъкване/актуализиране/изтриване):

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;

Сега вашата заявка може да гласи:

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!

Ако промените стойностите на някои от тези флагове в зависимост от заявката, можете да експериментирате с добавянето на тези колони към ключа на индекса вместо филтъра, напр. да кажем, че понякога проверявате за OnHold = 0 и понякога 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;

Може също да искате да експериментирате с MemberMailID в ключа вместо INCLUDE . напр.:

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;

Тези разлики може да нямат значение за вашите данни и модели на използване, но ще можете да тествате разликите по-лесно, отколкото ние ще можем да предположим.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция LEN, която не включва крайни интервали в SQL Server

  2. Автоматично събиране на данни за изпълнени задачи в MS SQL Server

  3. Намерете име на таблица във всички обекти на всички бази данни

  4. Създайте функция за разделяне в SQL

  5. Заявка за разделяне на SQL Server