Dutch,
I would say thats normal.
The problem is when we use a table we read all records to ADO if we are using adUseClient as :CursorLocation.
With the index the time is doubled because ADORDD first issues a query SELECT * FROM... and then when you SE INDEX it issues another SELECT * FROM ORDER BY.
So 2 queries that read all records.
In these cases either you can set the query SELECT * FROM WHERE condition only to read the records you need might be only a few hundred but this will break code compatibility.
Other alternative try to use adUseServer together with CacheSize and the property Maximum Opens Rows.
CacheSize := 100
Maximum Opens Rows := 170
You will need to change the setup of MySql ODBC driver to enable dynamic cursors.
I dont know how ADORDD will behave because it might loose the :AbsolutePositon property but you can try it.
We will have to study this alternative in a next version.
May be Rao could help us with his knowledge of SQL ad ADO.
Besides that is it working ok?