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

Optimasi Sql:Xml atau Delimited String

Sekarang ada opsi ke-4 - parameter bernilai tabel , di mana Anda benar-benar dapat meneruskan tabel nilai ke sproc sebagai parameter dan kemudian menggunakannya seperti biasa Anda menggunakan variabel tabel. Saya lebih suka pendekatan ini daripada XML (atau pendekatan penguraian CSV)

Saya tidak dapat mengutip angka kinerja di antara semua pendekatan yang berbeda, tetapi itulah yang akan saya coba - saya sarankan untuk melakukan beberapa tes kinerja nyata pada pendekatan tersebut.

Sunting:
Sedikit lagi di TVP. Untuk meneruskan nilai ke sproc Anda, Anda cukup mendefinisikan SqlParameter (SqlDbType.Structured) - nilai ini dapat diatur ke sumber IEnumerable, DataTable, atau DbDataReader apa pun. Jadi mungkin, Anda sudah memiliki daftar nilai dalam semacam daftar/array - Anda tidak perlu melakukan apa pun untuk mengubahnya menjadi XML atau CSV.

Saya pikir ini juga membuat sproc lebih jelas, lebih sederhana, dan lebih mudah dirawat, memberikan cara yang lebih alami untuk mencapai hasil akhir. Salah satu poin utama adalah bahwa SQL melakukan yang terbaik pada aktivitas manipulasi berbasis set/tidak perulangan/non string.

Itu tidak berarti itu akan bekerja dengan baik dengan sejumlah besar nilai yang diteruskan. Tetapi dengan set yang lebih kecil (hingga ~1000) itu akan baik-baik saja.



  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 cara saya memiliki batasan centang yang merujuk ke tabel lain?

  2. Solusi untuk memanggil fungsi bernilai tabel dari jarak jauh di SQL Server memiliki lebih banyak masalah

  3. Jatuhkan kunci utama menggunakan skrip di database SQL Server

  4. LIKE dan NULL dalam klausa WHERE dalam SQL

  5. Mengapa IS NOT NULL mengembalikan nilai NULL untuk Varchar (maks) di SQL Server?