在MySQL中,索引的速度是否大于>比较?

nxowjjhe  于 2023-02-21  发布在  Mysql
关注(0)|答案(3)|浏览(123)

我的数据库中有一个事件表,其中包括start_date和end_date列。
我经常运行如下查询

where start_date > 'some starting date' and end_date < 'some end date'

向start_date和end_date列添加索引是否会带来好处?我发现这不是=比较,但也许无论如何都可以。

6l7fqoea

6l7fqoea1#

MySQL优化器将在它认为合适的地方使用索引:
B树索引可用于使用=、〉、〉=、〈、〈=或BETWEEN运算符的表达式中的列比较。
...
有时候,即使有索引可用,MySQL也不使用索引。出现这种情况的一种情况是,优化程序估计使用索引将需要MySQL访问表中很大比例的行。(在这种情况下,表扫描可能会快得多,因为它需要的查找较少。)
来源:Comparison of B-Tree and Hash Indexes
你可能会觉得这些很有趣:
How MySQL Uses Indexes
这个答案和这个Why does MySQL not use an index for a greater than comparison?的答案。

wj8zmpe1

wj8zmpe12#

是的,数据库将使用这些索引,这应该会提高性能。
注意:它不能同时使用两个disctinct索引,为了获得更好的性能,您需要一个multi-column index

zf2sa74q

zf2sa74q3#

我建议使用这两个复合索引:

INDEX(start_date, end_date),
INDEX(end_date, start_date)

然而,它们可能不像您希望的那样有益。这是因为没有好的方法在多个“范围”上使用索引。
如果范围不重叠,则存在某种复杂的技术来使某些查询相当快:http://mysql.rjweb.org/doc.php/ipranges

相关问题