Jawabannya tentu saja "tergantung" tetapi berdasarkan pengujian akhir ini...
Dengan asumsi
- 1 juta produk
productmemiliki indeks berkerumun diproduct_id- Sebagian besar (jika tidak semua) produk memiliki informasi yang sesuai di
product_codemeja - Indeks ideal ada di
product_codeuntuk 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.