I have a table that has a datetime field "updated_at". A lot of my queries will be querying on this field using range queries such as rows that have updated_at > a certain date.
I already added an index to updated_at, but most of my queries are still very slow, even when I had a limit to the number of rows return.
What else can I do to optimize queries that query on datetime fields?
Usually database optimizers won't chose to use indexes for open-ended ranges, such a updated_at > somedate
.
But, in many cases the datatime column won't exceed "now", so you can preserve the semantic of > somedate
by converting the condition to a range by using between
like this:
where updated_at between somedate and current_timestamp
A between
predicate is much more likely to cause the optimizer to chose to use an index.
Please post if this approach improved your query’s performance.