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

  • Chaoticmoogle

    Chaoticmoogl

    13 ŞUBAT 2006
  • movies95

    movies95

    27 Kasım 2006
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006