Saya hanya ingin memastikan saya berada di jalur yang benar dengan konsep-konsep ini, sehingga umpan balik akan sangat dihargai.
Inilah teori saya dari kueri yang baru saja saya optimalkan, melalui proses coba-coba dan membaca dokumentasi MSDN.
The Query
DECLARE @pic_id int
SET pic_id = 1
SELECT ROW_NUMBER() OVER (ORDER BY pic_date desc) AS row_num, *
FROM tbl_pics
WHERE deleted = 0 AND map_id = 1 AND (hidden = 0 OR pic_id = @pic_id)
Indeks
CREATE NONCLUSTERED INDEX [IX_tbl_pics] ON [dbo].[tbl_pics]
(
[map_id] ASC,
[deleted] ASC,
[pic_date] DESC
)
INCLUDE ( [hidden], [pic_id] )
Ada juga indeks PK di pic_id
Teori
Kolom kuncinya demikian, karena digunakan dalam klausa WHERE (tetapi tidak digunakan dalam situasi ATAU) atau dan ORDER BY.
Kolom bukan kunci (TERMASUK) seperti itu, karena mereka digunakan di WHERE, tetapi karena mereka digunakan dalam skenario ATAU mereka tidak bisa (tidak = tidak akan meningkatkan kinerja) menjadi kolom kunci.
Apakah anggapan ini benar? Jika tidak, apa yang saya lewatkan?
Terima kasih!