Még pelyhes-seggű koromban elkeztem írni egy assembler fordítót. (Mi mást?:)) Az első mentben ki kell gyűjteni a hivatkozásokat, majd rendezni a második menethez. Persze minél gyorsabban.
A leggyorsabb eljárás pedig az, ha nincs index és nincs rendezés (adatmozgatás), se komparálás. A hivatkozás címével megcímzett tömbbe kell csak bejegyezni a talált hivatkozást. A tömböt sorrendben kiolvasva automatikusan sorrendbe jönnek az adatok is. Ebben az esetben az adott címhez csak azt kell eldönteni, hogy hivatkoztak-e rá. Semmi nem mozog, nincs rendezés és komparálás.
A következő példában hívásrekordokból kell kigyűjteni valamilyen felbontásban (óra, félóra, negyedóra) a forgalmat. Ezt meg lehet úgy is oldani, hogy az időt intervallumra komparálva összegzed a forgalmat, de ez nagyon lassú. Második megoldásként lehet időre rendezni a rekordokat, de sajnos a komparálások száma így sem csökken. A leggyosabb módszer az idők átalakítása: HH:MM:SS -> intervallum. Ekkor csak összegezni kell a forgalmat az adott indexű elembe. Kicsit furának tűnhet a megoldás, pedig csak a MM értéke alapján kell egy intervallumot kijelölni. Pl. MM [00-14] -> HH:00:00 - negyedórás bontásban. A magyarázathoz az is hozzátartozik, hogy a feldolgozás awk-ban készült és nagy mennyiségű, időben kevert rekordot kellett feldolgozni. Tehát regexp és tetszőleges indexű tömb is rendelkezésre állt.
Sok esetben az sql és egyéb megszokott módszerek helyett lehet "visszafelé" is gondolkodni. Ehhez olyan nyelv kell, amelyben az index adatként is hozzáférhető. Ilyen pl. az awk vagy a BerkeleyDB - amire nem véletlenül tette rá a kezét az Oracle.