Let's say I have a table called PEOPLE
having 3 columns ID, LastName, FirstName
, none of these columns are indexed.
LastName
is more unique, and FirstName
is less unique.
If I do 2 searches:
select * from PEOPLE where FirstName="F" and LastName="L"
select * from PEOPLE where LastName="L" and FirstName="F"
My belief is the second one is faster because the more unique criterion (LastName
) comes first in the where
clause, and records will get eliminated more efficiently. I don't think the optimizer is smart enough to optimize the first sql.
Is my understanding correct?
No, that order doesn't matter (or at least: shouldn't matter).
Any decent query optimizer will look at all the parts of the WHERE
clause and figure out the most efficient way to satisfy that query.
I know the SQL Server query optimizer will pick a suitable index - no matter which order you have your two conditions in. I assume other RDBMS will have similar strategies.
What does matter is whether or not you have a suitable index for this!
In the case of SQL Server, it will likely use an index if you have:
(LastName, FirstName)
(FirstName, LastName)
(LastName)
, or just (FirstName)
(or both)On the other hand - again for SQL Server - if you use SELECT *
to grab all columns from a table, and the table is rather small, then there's a good chance the query optimizer will just do a table (or clustered index) scan instead of using an index (because the lookup into the full data page to get all other columns just gets too expensive very quickly).