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

Fungsi panggilan di mana klausa

Seperti biasa dengan SQL, kueri sebagian besar tidak relevan tanpa mengetahui skema aktual yang digunakan.

Apakah Anda memiliki indeks di Members.Phone? Jika tidak, maka tidak ada bedanya bagaimana Anda menulis kueri, mereka semua akan memindai seluruh tabel dan melakukan hal yang sama (mis. berkinerja buruk). Jika Anda memiliki indeks maka cara Anda menulis kueri membuat semua perbedaan:

SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE  dbo.FormatPhone(Phone)[email protected];

Permintaan pertama dijamin optimal, akan mencari telepon di indeks.
Kueri kedua tergantung pada karakteristik dbo.FormatPhone. Ini mungkin atau mungkin tidak menggunakan pencarian yang optimal.
Kueri terakhir dijamin buruk. Akan memindai tabel.

Juga, saya menghapus petunjuk NOLOCK, sepertinya tema hari ini... Lihat sintaks untuk nolock di sql . NOLOCK selalu jawaban yang salah. Gunakan isolasi snapshot.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perintah DELETE terlalu lambat dalam Tabel dengan Indeks Clustered

  2. ExecuteNonQuery:Properti koneksi belum diinisialisasi.

  3. Menggunakan tabel database sebagai antrian

  4. xquery value() metode tidak berfungsi dan memberikan kesalahan

  5. Kinerja bcp/BULK INSERT vs. Parameter Bernilai Tabel