I have a query which can be expressed 2 different ways with the same results. Which one is better - for performance or other reasons?
First query:
SELECT post_id FROM posts
WHERE post_date BETWEEN '2010-01-01 00:00:00' AND '2010-12-31 23:59:59'
Second query:
SELECT post_id FROM posts
WHERE YEAR(post_date)=2010
Thanks in advance.
After suggestion for benchmarking I have had some searchs and tests. My tests were not benchmarks because of some problems on my computer but they gave me some idea.
I have tested my 4000 rowed table and there was not an important difference. BETWEEN command was just more 0.01-0.02 sec than YEAR(post_date) at 0.09 total query time. It seems using YEAR(post_date) would be good for both performance and usability.
And I have learned that while searches; if hours or minutes are not so important, BETWEEN could be used like this:
SELECT post_id FROM posts
WHERE post_date BETWEEN '2010-01-01' AND '2010-12-31'
MySQL full-text search (FTS) is far much faster than queries using wildcard characters.
MySQL retrieves and displays DATE values in ' YYYY-MM-DD ' format. The supported range is '1000-01-01' to '9999-12-31' . The DATETIME type is used for values that contain both date and time parts.
To count the difference between dates in MySQL, use the DATEDIFF(enddate, startdate) function. The difference between startdate and enddate is expressed in days. In this case, the enddate is arrival and the startdate is departure .
If you have an index on post_date
(which I'd recommend if you want to run this query often), then the BETWEEN
query can use it. Once you put a column into a function (YEAR(post_date)
), MySQL no longer uses the column's index, so it has to go through all the rows (that's called a full table scan
).
Check out the output of EXPLAIN SELECT
with your queries (check this tutorial) and see what results you'll get - if there's a usable index, you should see the difference clearly.
Of course, benchmark your code and see for yourself - but in general, using functions in WHERE is slower.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With