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

Pivot SQL Server vs. beberapa gabungan

Jawabannya tentu saja "tergantung" tetapi berdasarkan pengujian akhir ini...

Dengan asumsi

  1. 1 juta produk
  2. product memiliki indeks berkerumun di product_id
  3. Sebagian besar (jika tidak semua) produk memiliki informasi yang sesuai di product_code meja
  4. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penguncian Optimis vs. Pesimis

  2. Kueri Pemblokiran SQL Server

  3. Menggunakan Variabel dalam Query OPENROWSET

  4. Cara Membuat Prosedur Tersimpan di SQL Server

  5. Tetapkan nama file secara dinamis ke string koneksi excel