我有一个包含500万行的表,我想只获得两个日期(date1和date2)之间具有字段date
的行。我试着做
select column from table where date > date1 and date < date2
但处理时间非常长。有更聪明的方法吗?也许直接访问一行并在该行之后才进行查询?我的观点是,有没有办法丢弃我的表的大部分与日期不匹配?或者我必须逐行阅读并比较日期?
答案 0 :(得分:1)
通常在检索结果之前应用某种条件。如果您无法过滤任何内容,则可能需要使用LIMIT
和OFFSET
:
SELECT * FROM table_name WHERE date BETWEEN ? AND ? LIMIT 1000 OFFSET 1000
一般情况下,您会LIMIT
显示您希望在特定页面上显示的任何数量的记录。
答案 1 :(得分:1)
您可以尝试/做一些事情:
1。)如果您还没有,请将日期列编入索引
2.。)在日期字段
上对表进行范围分区对表进行分区时,查询优化器可以在不实际处理任何数据的情况下消除无法满足查询的分区。
例如,假设您按月将日期字段分区,并且表中有6个月的数据。如果在OCT-2012中查询一周范围之间的日期,查询优化器可以丢弃6个分区中的5个,并且仅扫描2012年OCT月份中具有记录的分区。
有关详细信息,请查看MySQL Partitioning页面。它为您提供了所有必要的信息,并在“分区修剪”部分中提供了上述内容的更多示例。
注意,我建议在新的分区表中创建/克隆您的表并执行查询以测试结果以及它是否满足您的要求。如果您还没有将日期列编入索引,那么这应该是您的第一步,测试,如果需要,请检查分区。