Du skulle prøve at tage et lille kig på
http://www.mysql.com/doc/en/EXPLAIN.html. Ved hjælp af explain (din sql-sætning), kan du se, hvilke indexes der bliver anvendt. Samtidig bliver brugen af ANALYZE forklaret.
For at et index fungerer, skal databasen have oprettet nogle søgetræer over indexerne. Hvis du i en tabel med 750.000 tupler opretter et index, giver det intet mærkbart til at starte med. Det skyldes, at der i søgetræet over indexet ikke er oprettet, det oprettes nemlig idet du anvender indexet. Hvis du laver en tom tabel med de rigtige indexer og flytter hver enkel tupel fra din store tabel over i den nye tabel, vil søgetræet blive oprettet.
Brugen af ANALYZE holder ligeså søgetræet vedlige, og bør dermed blive kørt jævnligt for at holde hastigheden i top.
I den sql-sætning du viser, bør du som minimum indexere 'node_id' og 'datasource_id' og sikkert også 'time'. Opretter du for mange indexer der ikke rigtig bliver brugt til noget, koster de kun i den forstand, at databasen holder dem vedlige.
Hvis du ofte søger på 2 nøgler adgangen (f.eks. node_id og datasource_id), kan det være en god ide at oprette et unikt index over disse nøgler, hvis altså der findes to ens sammensætninger af dem. Husk desuden at anvende heltal som primærnøgler - gerne autonummerering, da alt andet sløver voldsomt.
Håber det bidrager til noget nyt, du ikke allerede har set på.