Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pernyataan SQL - Bagaimana Meningkatkan kecepatan dengan pengindeksan

Indeks ini mungkin akan membantu, tetapi perlu diingat bahwa tidak ada makan siang gratis (indeks harus dipertahankan, jadi ini akan mempengaruhi beban kerja insert/update/delete Anda):

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;

Sekarang kueri Anda dapat mengatakan:

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!

Jika Anda mengubah nilai beberapa tanda ini bergantung pada kueri, Anda dapat bereksperimen dengan menambahkan kolom tersebut ke kunci indeks alih-alih filter, mis. katakanlah terkadang Anda memeriksa OnHold = 0 dan terkadang 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;

Anda mungkin juga ingin bereksperimen dengan memiliki MemberMailID di kunci alih-alih INCLUDE . misalnya:

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;

Perbedaan ini mungkin tidak berpengaruh pada data dan pola penggunaan Anda, tetapi Anda akan dapat menguji perbedaan lebih mudah daripada yang dapat kami tebak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya mengulang variabel tabel di T-SQL?

  2. Lihat apa yang dilakukan sp_execute

  3. Bagaimana ekspresi CASE ini mencapai klausa ELSE?

  4. Bagaimana cara melakukan dan mengembalikan transaksi di sql server?

  5. Melewati Daftar<> ke SQL Stored Procedure