SORU
27 NİSAN 2011, ÇARŞAMBA


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
27 NİSAN 2011, ÇARŞAMBA


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"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • Metheud

    Metheud

    9 EYLÜL 2006