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

UNION ALL vs kondisi ATAU dalam permintaan server sql

Masalahnya adalah Anda menentukan dua kondisi dengan ATAU yang berlaku untuk tabel terpisah dalam kueri Anda. Karena itu, pencarian indeks nonclustered harus mengembalikan sebagian besar atau semua baris di tabel besar Anda karena logika OR berarti mereka mungkin juga cocok dengan klausa kondisi di tabel kedua.

Lihatlah rencana eksekusi SQL di ketiga contoh di atas, dan perhatikan jumlah baris yang keluar dari pencarian indeks nonclustered dari tabel besar. Hasil akhir hanya dapat mengembalikan 1.000 atau kurang dari 800.000 baris dalam tabel tetapi klausa OR berarti bahwa isi tabel itu harus dirujuk silang dengan kondisi di tabel kedua karena OR berarti mereka mungkin diperlukan untuk final keluaran kueri.

Bergantung pada rencana eksekusi Anda, pencarian indeks dapat menarik semua 800.000 baris dalam tabel besar karena mereka mungkin juga cocok dengan kondisi klausa OR di tabel kedua. UNION ALL adalah dua kueri terpisah terhadap satu tabel masing-masing, sehingga pencarian indeks hanya harus menampilkan kumpulan hasil yang lebih kecil yang mungkin cocok dengan kondisi kueri tersebut.

Saya harap ini masuk akal. Saya mengalami situasi yang sama saat memfaktorkan ulang pernyataan SQL yang berjalan lambat.

Semangat,

Andre Ranieri



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana saya bisa Memperbarui 100 catatan teratas di server sql

  2. Bagaimana menemukan catatan duplikat dengan menggunakan Grup oleh dan Memiliki klausa di SQL Server - Tutorial SQL Server / TSQL Bagian 132

  3. Menyimpan pesan galat SqlServer di C#

  4. Pernyataan BERGABUNG Bersyarat SQL Server

  5. Apa cara terbaik untuk menyisipkan basis data massal dari c #?