Kimliklerin büyük bir listesini almak için bir sorgu yazmak gerekiyor.
Birçok arka ucunu (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...) destekliyoruz, bu yüzden standart bir SQL yazmam gerekiyor.
Kimlik kümesinin boyutu büyük olabilir, sorgu programlı olarak oluşturulur. Peki, en iyi yaklaşım nedir?
1) IN kullanarak sorgu yazma
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Benim sorum bu. N çok büyükse ne olur? Peki ya performans?
2) VEYA kullanarak sorgu yazma
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Bu yaklaşımın n sınırı olmadığını düşünüyorum, ama n çok büyükse performans ne olacak?
3) Programlı bir çözüm yazmak:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Veritabanı sunucusu ağ üzerinden sorgulandığında bu yaklaşımla ilgili bazı sorunlar yaşadık. Normalde, çok sayıda küçük sorgu yapmaya karşı tüm sonuçları alan bir sorgu yapmak daha iyidir. Belki de ben hatalıyım.
Bu sorun için doğru çözüm ne olabilir?
IN
! Ben çözüm 1 + 3 olarak benim yaptı. Sadece son sorgu yürütmek için SQL gönderilen bir, uzun sorgu dizesi oldu.