Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which mySQL date query performs better?

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'
like image 436
aiternal Avatar asked Jul 19 '10 12:07

aiternal


People also ask

Which query is faster in MySQL?

MySQL full-text search (FTS) is far much faster than queries using wildcard characters.

What is the correct MySQL date format?

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.

How can I compare two dates in MySQL?

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 .


1 Answers

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.

like image 134
Piskvor left the building Avatar answered Sep 23 '22 15:09

Piskvor left the building