Seperti judulnya ... Saya mencoba mencari cara tercepat dengan overhead paling sedikit untuk menentukan apakah ada catatan dalam tabel atau tidak.
Permintaan sampel:
SELECT COUNT(*) FROM products WHERE products.id = ?;
vs
SELECT COUNT(products.id) FROM products WHERE products.id = ?;
vs
SELECT products.id FROM products WHERE products.id = ?;
Katakanlah ?
bertukar dengan 'TB100'
... baik kueri pertama dan kedua akan mengembalikan hasil yang sama persis (katakanlah ... 1
untuk percakapan ini). Permintaan terakhir akan kembali 'TB100'
seperti yang diharapkan, atau tidak ada jika id
tidak ada dalam tabel.
Tujuannya adalah untuk mengetahui apakah id
ada di dalam tabel atau tidak. Jika tidak, program selanjutnya akan memasukkan catatan, jika ya, program akan melewatkannya atau melakukan kueri UPDATE berdasarkan logika program lain di luar cakupan pertanyaan ini.
Mana yang lebih cepat dan memiliki lebih sedikit overhead? (Ini akan diulang puluhan ribu kali per program yang dijalankan, dan akan dijalankan berkali-kali sehari).
(Menjalankan kueri ini terhadap M $ SQL Server dari Java melalui driver JDBC yang disediakan M $)
if exists(select null from products where id = @id)
; jika dalam kueri dipanggil langsung oleh klien select case when exists (...) then 1 else 0 end
.