搜索MySQL中2个日期之间的条目

时间:2014-02-28 14:19:15

标签: mysql

我有一个表格,其中包含start_dateend_date(两者都是索引,DATE格式)的条目。我想返回今天在这两个日期之间的所有条目的列表。以下是我考虑过的两个选项:

1)直接查询: MySQL查询(其中28/02/2014当然是可变的):

SELECT * FROM mytable WHERE '28/02/2014' BETWEEN start_date AND end_date

2)每日cronjob遍历所有条目并更新字段is_valid(布尔格式),当今天在两个日期之间时为true,否则为false(此处性能不太重要,因为它不是客户 - 面对)。然后用于选择条目的MySQL查询将是:

SELECT * FROM mytable WHERE is_valid = 1

最终目标是在条目未来达到100,000甚至数百万时,获得最快的查询(将在搜索结果中使用,这将是网站的一个重要页面)。我不确定索引日期是否足够好,或者cronjob是否过度 - 或者是否有更好的方法可以做到这一点!

提前感谢您选择哪个选项的建议!

编辑:感谢回复 - 这个索引结构好吗? enter image description here

2 个答案:

答案 0 :(得分:0)

之前我使用过相同的模式。如果您有正确的索引,那么带有日期的查询就足够快了。

答案 1 :(得分:0)

如果您希望在这两个选项之间进行更快的查询,那么就没有像cron作业那样适当地设置标志。然后,您应该索引结果列,否则您必须执行全表扫描。如果没有索引,这种方法可能比使用带索引的日期要慢。

对于大多数用途,start_dateend_date上的复合索引是首选解决方案,应该足够快。

我怀疑你正在提交过早优化的守护进程。最快的方法是运行一个cron作业并将今天的数据加载到一个新表中,为您的分析正确编制索引和结构。除此之外,综合指数是一种非常合理的方法。虽然更新标志确实解决了问题,但它既不是最快也不是最干净的方法。