Asıl değindiğim nokta aynı sizin yaptığınız gibi her döngüde sorgu çalıştıran bir sistemdi ancak bu while döngüsüne dayanıyordu. Bunun daha doğru olmasının 2 sebebi var. Birinci sebep döngüsel bir mantığı kurup fonksiyonunu yazmanın özyinelemeli olanlara göre daha kolay olması ama asıl sebep olan ikinci sebep özyinelemeli yapıldığında bu işlemin fazladan bellek tüketmesi. Bu da şöyle oluyor, özyinelemeli sistemde birinci çağrı sonlanmadan hemen önce kendisine yeni bir çağrı yapıyor, ve bu çağrı da aynı işlemi en tepedeki düğüme gidene kadar yapıyor, en tepedeki düğüme ulaşıldığında aynı anda aktif olan n tane işlev örneği oluyor(instance). Yani çağrılan her işlevin değişkenleri bellekte ayrı ayrı yer kaplıyor çünkü bir işlevin içinde yapılan işlev çağrıları sonlanmadan o çağrıları yapan işlev de sonlanmaz. Halbuki döngüsel sistemde sadece 1 işlevin haracayacağı normal bellek miktarı harcanıyor.
Bir diğer yaklaşımım da düğüm bağlantı sayısı/kayıt sayısı oranı fazla olduğunda tüm kayıtları WHERE ifadesi kullanmadan çekip sonra onlar içinde locate metodu ile gezmenin daha hızlı olacğaıydı ki bunu da deneyerek gördüm zaten. İkincisi tecrübeye dayanıyor zaten

Ama sizin de belirttiğiniz gibi 1000 kayıt ve üzerinde, hele ki en fazla 3-4 kademelik bir bağlanma varsa bu sistem daha yavaş olacaktır muhtemelen.