Bir örneği ele alalım: fatura kayıtlarına sahip bir tablo ve fatura satır öğesi kayıtlarına sahip bir tablo. İstemci sözde kodunu düşünün:
for each (invoice in invoices)
let invoiceLines = FindLinesFor(invoice)
...
Her biri 10 satırlı 100.000 faturanız varsa, bu kod 1 milyonluk bir tablodan 10 fatura satırı arar ve bunu 100.000 kez yapar. Tablo boyutu arttıkça, seçme işlemlerinin sayısı artar ve her seçme işleminin maliyeti artar.
Bilgisayarlar hızlı olduğundan, binlerce kayıt veya daha az kaydınız varsa iki yaklaşım arasında bir performans farkı göremeyebilirsiniz. Maliyet artışı doğrusaldan daha fazla olduğu için, kayıtların sayısı arttıkça (milyonlarca, diyelim ki), bir fark fark etmeye başlayacaksınız ve veri kümesinin boyutu büyüdükçe fark daha az tolere edilebilir hale gelecektir.
Ancak birleştirme. tablonun dizinlerini kullanır ve iki veri kümesini birleştirir. Bu, ikinci tabloya rasgele N kez erişmek yerine bir kez etkili bir şekilde taradığınız anlamına gelir. Tanımlanmış bir yabancı anahtar varsa, veritabanında dahili olarak depolanan ilgili kayıtlar arasında bağlantılar zaten vardır.
Bunu kendiniz yaptığınızı düşünün. Alfabetik bir öğrenci listeniz ve tüm öğrencilerin not raporlarını içeren bir not defteriniz var (sınıf başına bir sayfa). Defter, öğrencilerin adlarına göre listeyle aynı sırada sıralanır. Nasıl ilerlemeyi tercih edersin?
- Listeden bir ad okuyun.
- Dizüstü bilgisayarı açın.
- Öğrencinin adını bulun.
- Bir sonraki öğrenciye veya son sayfaya ulaşıncaya kadar sayfaları çevirerek öğrencinin notlarını okuyun.
- Dizüstü bilgisayarı kapatın.
- Tekrar et.
Veya:
- Not defterini ilk sayfaya açın.
- Listeden bir ad okuyun.
- Defterteki bu isim için notları okuyun.
- Sonuna kadar 2-3. Adımları tekrarlayın.
- Dizüstü bilgisayarı kapatın.