NEREDE (ıd1, NO2, ..., ıdn)KİMLİĞİ SQL
Kimlikleri büyük bir listesini almak için bir sorgu yazmam gerekiyor.
Birçok arka ucu (MySql, Firebird, SQL Server, Oracle, Postgress ...) destek yapmak standart bir SQL yazmam gerekiyor.
Kimliği kümesi boyutunu, sorgu oluşturulur büyük programlama yoluyla olabilir. Size en iyi yaklaşımın ne olduğunu düşünüyorsun?
1) bir sorgu kullanarak Yazma
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Benim sorum burada. Eğer n çok büyük olursa ne olur? Performans ne olacak ayrıca?
2) bir sorgu kullanarak Yazma YA
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Bu yaklaşım n sınır yok, ama eğer n çok büyük olursa ne düşünüyorum?
3) programlama yoluyla bir çözüm Yazma:
foreach (id in myIdList)
{
item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " id);
myObjectList.Add(item);
}
Veritabanı sunucusu ağ üzerinden sorgulandığında bu yaklaşım ile bazı sorunlar yaşadık. Normalde daha iyi sonuçlar, küçük sorguları çok daha iyi almak için bir sorgu yapmak. Belki de yanılıyorum.
Lütfen, DB uzmanlar bu sorun için doğru bir çözüm olacağını bana açıklayabilir mi?
Şimdiden teşekkürler
CEVAP
Seçenek 1 Tek iyi çözümdür.
Neden?
Seçenek 2 yapar aynı ama tekrar sütun adı birçok kez; ayrıca SQL motoru yok hemen bilmek istediğiniz için kontrol değeri, bir değerleri sabit bir liste. Ancak, iyi bir SQL motoru
IN
ile eşit performans için optimize olabilir. Hala okunabilirlik sorunu var...Seçenek 3 sadece korkunç performans-bilge. Her döngü bir sorgu gönderir ve küçük bir sorgu ile veritabanı çekiç. Ayrıca, herhangi bir optimizasyon kullanarak engeller "değer verilen bir listede bunlardan biridir"
Nerede C kod yavaş R fonksiyonları hız...
Nasıl Almasıyla aygıt KİMLİĞİ alabilir...
Ec2 bir makine içinden örnek kimliği b...
Nasıl bir Kullanıcı Kimliği ASP.NET MV...
Başlığın nerede pratik bir örnek kulla...