Saya perlu menulis kueri untuk mengambil daftar besar id.
Kami mendukung banyak backend (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...) jadi saya perlu menulis SQL standar.
Ukuran set id bisa besar, kueri akan dihasilkan secara terprogram. Jadi, apa pendekatan terbaik?
1) Menulis kueri menggunakan IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Pertanyaan saya di sini adalah. Apa yang terjadi jika n sangat besar? Juga, bagaimana dengan kinerja?
2) Menulis kueri menggunakan OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Saya pikir pendekatan ini tidak memiliki batas n, tetapi bagaimana dengan kinerja jika n sangat besar?
3) Menulis solusi terprogram:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Kami mengalami beberapa masalah dengan pendekatan ini ketika server database ditanyai melalui jaringan. Biasanya lebih baik melakukan satu kueri yang mengambil semua hasil dibandingkan membuat banyak kueri kecil. Mungkin aku salah.
Apa solusi yang tepat untuk masalah ini?
IN
! Saya melakukan tambang sebagai solusi Anda 1 + 3. Hanya kueri terakhir adalah satu, string kueri panjang dikirim ke SQL untuk dieksekusi.