Tranzakció használat segíthet a dolgon, pl:
SQLTransaction.StartTransaction;
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('SELECT * FROM MyTable');
SQLQuery.SQL.Open;
SQLQuery.First;
while not SQLQuery.EOF do
begin
for i := 0 to SQLQuery.FieldCount - 1 do StringGrid.Cells[i, SQLQuery.RecNo] := SQLQuery.Fields[i].AsString; // vagy bármi más StringGrid helyett
SQLQuery.Next;
end;
SQLQuery.Close;
SQLTransaction.Commit;
A tapasztalatom az, hogy a táblában található rekordok számától másodfokúan függ a lekérdezés időtartama. Biztosan függ ezer más tényezőtől is, az adatbázis típusától, táblaszerkezetétől, struktúrájától, stb. Viszonyításképpen egy végletekig leegyszerűsített SQLite adatbázisban nagyságrendileg 20 ezer rekord után értem el a 3 másodperces lekérdezés-futási időt, de ez is biztosan függ a számítógép teljesítményétől és alkatrészeitől.
Ha rekordok nélkül fut a lekérdezés több másodpercig, ott szerintem nem az SQLQuery-ben kell keresned a lassúság okát.