索引加速大于>在MySQL中比较?

时间:2011-07-19 12:45:42

标签: mysql indexing

我的数据库中有一个事件表,其中包括start_date和end_date列。

我经常运行像

这样的查询
where start_date > 'some starting date' and end_date < 'some end date'

我是否可以从start_date和end_date列添加索引中获益?我发现这不是一个=比较,但无论如何也许。

3 个答案:

答案 0 :(得分:14)

MySQL优化器将使用它认为合适的索引:

  

B树索引可用于表达式中的列比较   使用=,&gt;,&gt; =,&lt;,&lt; =或BETWEEN运算符。

     

...

     

有时MySQL不使用索引,即使有索引也是如此。一   发生这种情况的情况是优化程序估计的时间   使用索引需要MySQL访问非常大的   表中行的百分比。 (在这种情况下,表扫描是   可能要快得多,因为它需要较少的搜索。)

来源:Comparison of B-Tree and Hash Indexes

你可能会发现这些有趣:

How MySQL Uses Indexes

this answerthis answerWhy does MySQL not use an index for a greater than comparison?

答案 1 :(得分:1)

是的,数据库将使用这些索引,它应该提高性能。

注意:它不能同时使用两个不同的索引以获得良好的性能,您需要multi-column index

答案 2 :(得分:-3)

根据我的经验,索引通常不会用于大于/小于条件,因为范围是开放式的,因此对于具有n行的表将有O(n)匹配行。

但是,一般 do 之间使用索引,因为范围有限,所以会有O(1)个匹配的行,所以你可以使用这个技巧:

where start_date between 'some starting date' and 'some end date'
and end_date beween 'some starting date' and 'some end date'

由于结束日期不能早于开始日期,因此这些比较仍然有意义。