Jawabannya tentu saja "tergantung" tetapi berdasarkan pengujian akhir ini...
Dengan asumsi
- 1 juta produk
product
memiliki indeks berkerumun diproduct_id
- Sebagian besar (jika tidak semua) produk memiliki informasi yang sesuai di
product_code
meja - Indeks ideal ada di
product_code
untuk kedua kueri.
PIVOT
versi idealnya membutuhkan indeks product_code(product_id, type) INCLUDE (code)
sedangkan JOIN
versi idealnya membutuhkan indeks product_code(type,product_id) INCLUDE (code)
Jika ini ada, berikan rencana di bawah ini
lalu JOIN
versi lebih efisien.
Dalam hal type 1
dan type 2
adalah satu-satunya types
di tabel lalu PIVOT
versi sedikit memiliki keunggulan dalam hal jumlah bacaan karena tidak harus mencari ke product_code
dua kali tetapi itu lebih dari sebanding dengan overhead tambahan dari operator agregat aliran
PIVOT
Table 'product_code'. Scan count 1, logical reads 10467
Table 'product'. Scan count 1, logical reads 4750
CPU time = 3297 ms, elapsed time = 3260 ms.
BERGABUNG
Table 'product_code'. Scan count 2, logical reads 10471
Table 'product'. Scan count 1, logical reads 4750
CPU time = 1906 ms, elapsed time = 1866 ms.
Jika ada tambahan type
catatan selain 1
dan 2
JOIN
versi akan meningkatkan keuntungannya karena hanya menggabungkan gabungan pada bagian yang relevan dari type,product_id
indeks sedangkan PIVOT
paket menggunakan product_id, type
dan karenanya harus memindai type
tambahan baris yang bercampur dengan 1
dan 2
baris.