Steve Schacher said:
I just thought of another question:
If the back-end were not a Jet database, but were SQL Server, would
the front-end now be smart enough to pass the WHERE clause or would it
still want to process the WHERE on the client?
Then the answer becomes "it depends". When using ODBC linked tables to a true
server back end any query you create against those links can range anywhere from
all processing being done on the server to all processing being done on the
client or anywhere in between.
Generally, the above setup will result in most of the processing being done on
the server, but the number of joins and the use of VBA functions (particularly
user-defined) or basically any function that the server doesn't understand can
cause more processing to be local.
With today's modern hardware, "processing" really isn't the issue that it once
was. What is of paramount importance is to get the server to do the selection
criteria so that the minimum amount of data is pulled over the wire.
SELECT blah, blah FROM SomeTable WHERE blah = 'SomeValue'
....would almost certainly process on the server. If the WHERE clause used
DateDiff or a UDF, then it might not. As always, correct application of indexes
will affect performance of the query, but should not affect whether it happens
on the server or the client. You can have an efficient query that has some
aspect of it that causes client processing and you can have a server processed
query that performs terribly simply because it's a badly designed query.
With a server based engine you can guarantee that all processing is done on the
server by using a PassThrough query or a Stored Procedure. You'd be surprised
though just how infrequently that is really necessary.