Wat doet de database eigenlijk?
Een query met een GROUP BY of en ORDER BY moet mogelijk de volledige resultatenset genereren en deze vervolgens sorteren/aggregeren voordat een rij wordt geretourneerd. Een zoekopdracht die een grote tabel scant, vindt mogelijk 50 rijen in de eerste paar blokken en leest dan nog eens honderdduizend blokken voordat er nog een wordt gevonden.
Ik stel voor dat je de VB-code negeert en de databasecode plaatst.