MYSQL OR vs IN performance

后端 未结 14 823
一向
一向 2020-11-22 04:12

I am wondering if there is any difference in regards to performance between the following

SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4)

SELECT ... FROM ..         


        
相关标签:
14条回答
  • 2020-11-22 04:42

    OR will be slowest. Whether IN or BETWEEN is faster will depend on your data, but I'd expect BETWEEN to be faster normally as it can simple take a range from an index (assuming someField is indexed).

    0 讨论(0)
  • 2020-11-22 04:46

    I think the BETWEEN will be faster since it should be converted into:

    Field >= 0 AND Field <= 5
    

    It is my understanding that an IN will be converted to a bunch of OR statements anyway. The value of IN is the ease of use. (Saving on having to type each column name multiple times and also makes it easier to use with existing logic - you don't have to worry about AND/OR precedence because the IN is one statement. With a bunch of OR statements, you have to ensure you surround them with parentheses to make sure they are evaluated as one condition.)

    The only real answer to your question is PROFILE YOUR QUERIES. Then you will know what works best in your particular situation.

    0 讨论(0)
  • 2020-11-22 04:49

    It depends on what you are doing; how wide is the range, what is the data type (I know your example uses a numeric data type but your question can also apply to a lot of different data types).

    This is an instance where you want to write the query both ways; get it working and then use EXPLAIN to figure out the execution differences.

    I'm sure there is a concrete answer to this but this is how I would, practically speaking, figure out the answer for my given question.

    This might be of some help: http://forge.mysql.com/wiki/Top10SQLPerformanceTips

    Regards,
    Frank

    0 讨论(0)
  • 2020-11-22 04:50

    From what I understand about the way that the compiler optimizes these types of queries, using the IN clause is more efficient than multiple OR clauses. If you have values where the BETWEEN clause can be used, that is more efficient still.

    0 讨论(0)
  • 2020-11-22 04:52

    I also did a test for future Googlers. Total count of returned results is 7264 out of 10000

    SELECT * FROM item WHERE id = 1 OR id = 2 ... id = 10000
    

    This query took 0.1239 seconds

    SELECT * FROM item WHERE id IN (1,2,3,...10000)
    

    This query took 0.0433 seconds

    IN is 3 times faster than OR

    0 讨论(0)
  • 2020-11-22 04:52

    2018: IN (...) is faster. But >= && <= is even faster than IN.

    Here's my benchmark.

    0 讨论(0)
提交回复
热议问题