Apakah lebih baik mengisi variabel menggunakan SET atau SELECT?

8

Apa cara yang lebih baik (berkaitan dengan kinerja) untuk menetapkan nilai ke variabel?

  1. Atas SETperintah:

    DECLARE @VarString nvarchar(max);
    SET @VarString = 'john doe';
    SELECT @VarString;
    
  2. Atas SELECTperintah:

    DECLARE @VarString nvarchar(max);
    SELECT @VarString = 'john doe';
    SELECT @VarString;
    
Gadonski
sumber
1
Menggunakan SELECT bukanlah semantik, tapi saya ingin tahu apakah ini lebih cepat daripada SET.
Rafael Kassner
1
Anda mungkin ingin melihat ke stackoverflow.com/questions/189588/…
SQL Learner
@ RafaelKassner - SELECTlebih cepat saat menetapkan nilai ke beberapa variabel sekaligus . Jika tidak, perbedaan kinerja dapat diabaikan.
Nick Chammas
@ SQLLearner - Laporan itu memberikan hasil yang tidak meyakinkan. Pertama poster menyatakan bahwa SETlebih cepat, kemudian setengah jalan dia menambahkan: "Anehnya, jika Anda menghitung jumlah run up mengatakan, 10, SETmulai tertinggal."
Nick Chammas

Jawaban:

8

Jangan memilih satu atau yang lain hanya untuk kinerja.

Pilih berdasarkan apa yang sesuai dengan gaya dan kebutuhan pengembangan Anda, seperti yang disarankan dalam kesimpulan untuk perbandingan yang sangat baik antara SELECTdanSET (penekanan dan pemformatan minor ditambahkan):

Praktik terbaik menyarankan untuk tidak berpegang teguh pada satu metode. Tergantung pada skenario Anda mungkin ingin menggunakan keduanya SETatau SELECT.

Berikut adalah beberapa skenario untuk menggunakan SET:

  • Jika Anda harus menetapkan satu nilai langsung ke variabel dan tidak ada kueri yang terlibat untuk mengambil nilai
  • NULL tugas diharapkan ( NULLdikembalikan dalam set hasil)
  • Standar dimaksudkan untuk diikuti untuk setiap migrasi yang direncanakan
  • Diharapkan hasil non skalar dan harus ditangani

Penggunaannya SELECTefisien dan fleksibel dalam beberapa kasus berikut:

  • Beberapa variabel sedang diisi dengan menetapkan nilai secara langsung
  • Beberapa variabel sedang diisi oleh sumber tunggal (tabel, tampilan)
  • Lebih sedikit pengkodean untuk menetapkan beberapa variabel
  • Gunakan ini jika Anda perlu @@ROWCOUNTdan @ERRORuntuk pernyataan terakhir dieksekusi
Nick Chammas
sumber
3

Saya pikir konsensus adalah ada perbedaan kinerja yang dapat diabaikan antara keduanya (dengan SETmenjadi lebih cepat). Tetapi jika Anda seperti saya, saya akan menggunakan yang SETsesuai untuk tujuan keterbacaan. Pria berikutnya yang akan menjaga kode Anda akan berterima kasih untuk itu ;-)

MarlonRibunal
sumber
1
Bisakah Anda memposting benchmark yang membuktikan bahwa SET lebih cepat?
AK
Alex, silakan lihat ini sebagai contoh stackoverflow.com/questions/189588/…
MarlonRibunal
Marlon, laporan itu memberikan hasil yang tidak meyakinkan. Perhatikan bahwa poster poster setengah-setengah mencatat bahwa: "Anehnya, jika Anda menghitung jumlah lari hingga mengatakan, 10, SET mulai tertinggal."
Nick Chammas
Itulah alasan mengapa jawaban saya condong ke arah "tujuan keterbacaan". Skenario use case dalam jawaban Anda adalah poin yang bagus.
MarlonRibunal
2

Saya selalu menggunakan SET kecuali jika saya mengisi beberapa variabel dari set hasil dari 1 kueri. Dengan begitu, dengan menggunakan SELECT kami hanya meminta tabel sekali.

Vince Pergolizzi
sumber