Saat membaca beberapa dokumentasi terkait SQL Tuning, saya menemukan ini:
SELECT COUNT(*)
:
- Menghitung jumlah baris.
- Seringkali tidak tepat digunakan untuk memverifikasi keberadaan catatan.
Benarkah SELECT COUNT(*)
itu buruk?
Apa cara yang tepat untuk memverifikasi keberadaan catatan?
sql
optimization
query-optimization
systempuntoout
sumber
sumber
Saya lebih suka tidak menggunakan fungsi Hitung sama sekali:
Misalnya jika Anda ingin memeriksa apakah pengguna ada sebelum memasukkannya ke dalam database, kueri akan terlihat seperti ini:
sumber
Kamu bisa memakai:
Jika tidak ada catatan yang cocok dengan kondisi, recordset yang dihasilkan kosong.
sumber
Jawaban lainnya cukup bagus, tetapi akan berguna juga untuk menambahkan
LIMIT 1
(atau yang setara , untuk mencegah pengecekan baris yang tidak perlu.sumber
akan mengulang melalui semua catatan. Ini adalah alasan yang buruk untuk digunakan untuk keberadaan rekaman.
Saya akan menggunakan
Setelah menemukan 1 record, itu akan mengakhiri loop.
sumber
SELECT TOP 1
apakah itu benar-benar berakhir setelah menemukan satu atau apakah ia terus menemukan semua untuk dapat mengatakan mana yang TOP?IF EXISTS (SELECT TOP 1 1 FROM ... WHERE ..)
Kamu bisa memakai:
atau
Ini akan lebih efisien daripada
SELECT *
karena Anda hanya memilih nilai 1 untuk setiap baris, daripada semua bidang.Ada juga perbedaan tipis antara COUNT (*) dan COUNT (nama kolom):
COUNT(*)
akan menghitung semua baris, termasuk nolCOUNT(column name)
hanya akan menghitung kemunculan nama kolom yang bukan nolsumber
count(1)
dancount(*)
akan berbeda hanya di DBMS yang paling mati otak.count(*)
dancount(1)
. Apakah itu yang terjadi pada DBMS lain , saya tidak bisa mengatakannya.Kamu bisa memakai:
Gunakan
select 1
untuk mencegah pengecekan bidang yang tidak perlu.Gunakan
LIMIT 1
untuk mencegah pemeriksaan baris yang tidak perlu.sumber
Saya menggunakan cara ini:
sumber
Pilihan lain:
sumber