2

我正在尝试查询与几个特定日期匹配的所有行的表。日期不是连续的,并且不希望返回整个日期范围的数据。具体日期的数量可能很大,几百个。该Date字段已编入索引,因此我想利用它。

Date字段转换为字符串并查询字符串比较感觉有点懒惰/性能不佳,并且会丢弃任何索引。像这样(下)的东西可以正常工作,但我担心性能和扫描表:

SELECT Date,Time,Open,High,Low,Close,Volume FROM minuteBarTable 
WHERE DATE(Date) IN ('2004-07-13','2011-09-01','2007-12-12');

使用一块 ' OR 's 具有正确的效果和正确的结果,但我想找到一种更优雅/可扩展的方法。数百个日期可能会变得有点笨拙:

SELECT Date,Time,Open,High,Low,Close,Volume FROM minuteBarTable 
WHERE Date='2004-07-13' OR Date='2011-09-01' OR Date='2007-12-12';

' OR的块在这里是更有效的方法吗?

4

1 回答 1

4

结合上面的两个 SQL:

SELECT Date,Time,Open,High,Low,Close,Volume FROM minuteBarTable 
WHERE Date IN ('2004-07-13','2011-09-01','2007-12-12');

这样 MySQL 就可以使用Date. 并且(根据 O'Reilly 的High Performance MySQLIN通常比 multiple 好OR,因为查询优化器对IN列表中的参数进行排序,因此在索引中找到结果会更快(也排序)。

于 2012-07-11T15:03:43.790 回答