İç içe döngüyü engelle - Block nested loop

Bir blok iç içe döngü (BNL) bir algoritma alışığım katılmak iki ilişki ilişkisel veritabanı.[1]

Bu algoritma[2] basit bir varyasyondur iç içe döngü birleştirme iki ilişkiye katılırdı ve (sırasıyla "dış" ve "iç" birleştirme işlenenleri). Varsayalım . Geleneksel bir iç içe döngü birleşiminde, her demet için bir kez taranacak . Çok sayıda uygunluk varsa demetler ve özellikle birleştirme anahtarı için geçerli bir dizin yoksa bu işlem çok pahalı olacaktır.

Blok iç içe döngü birleştirme algoritması, yalnızca tarayarak basit iç içe döngü birleştirmeyi geliştirir her biri için bir kez grup nın-nin tuples. Örneğin, blok yuvalanmış döngü birleştirmenin bir varyantı, sayfa nın-nin hafızaya kaydeder ve bunları bir karma tablo. Daha sonra tarar ve bulmak için karma tablosunu araştırır Şu anki sayfadaki tuplelardan herhangi biriyle eşleşen diziler . Bu, tarama sayısını azaltır. bu gerekli.

Bu algoritmanın daha agresif bir çeşidi, mevcut belleğe sığabilecek şekilde, tüm bu tür kayıtları bir karma tabloya yükler ve ardından tekrar tekrar tarar . Bu, tarama sayısını daha da azaltır bu gerekli. Aslında, bu algoritma esasen klasiklerin özel bir durumudur karma birleştirme algoritması.[kaynak belirtilmeli ]

Blok iç içe geçmiş döngü, I / O'lar nerede dahili belleğin mevcut sayfalarının sayısı ve ve boyutu ve sırasıyla sayfalarda. Blok iç içe döngünün çalıştığını unutmayın. I / O'lar eğer mevcut dahili belleğe sığar.

Referanslar

  1. ^ "8.2.1.14 İç İçe Döngü ve Toplu Anahtar Erişimi Birleşmelerini Engelle". MySQL 5.6 Referans Kılavuzu. Oracle Corporation. Alındı 2 Ağustos 2015.
  2. ^ "İç İçe Döngüye Katılmayı Engelle". MariaDB. MariaDB Corporation Ab. Alındı 2 Ağustos 2015.