Misalkan saya punya 2 tabel, Produk dan Kategori Produk. Kedua tabel memiliki hubungan di CategoryId. Dan ini adalah kueri.
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
Ketika saya membuat rencana eksekusi, tabel ProductCategories melakukan pencarian indeks kluster, yang sesuai harapan. Tetapi untuk tabel Produk, ia melakukan scan indeks cluster, yang membuat saya ragu. Mengapa FK tidak membantu meningkatkan kinerja kueri?
Jadi saya harus membuat indeks di Products.CategoryId. Ketika saya membuat rencana eksekusi lagi, kedua tabel melakukan pencarian indeks. Dan diperkirakan biaya subtree berkurang banyak.
Pertanyaan saya adalah:
Selain FK membantu dalam kendala hubungan, apakah ada manfaat lain? Apakah ini meningkatkan kinerja permintaan?
Haruskah saya membuat indeks pada semua kolom FK (disukai Products.CategoryId) di semua tabel?