1

我有一个包含 500 万行的表,我只想获取具有date两个日期(date1 和 date2)之间的字段的行。我试着做

select column from table where date > date1 and date < date2

但是处理时间真的很大。有没有更聪明的方法来做到这一点?也许直接访问一行并仅在该行之后进行查询?我的意思是,有没有办法丢弃与日期期间不匹配的大部分表格?或者我必须逐行阅读并比较日期?

4

2 回答 2

1

您可以尝试/做几件事:

1.) 如果您还没有,请索引您的日期列

2.) 在日期字段上对表进行范围分区

当您对表进行分区时,查询优化器可以消除在不实际处理任何数据的情况下无法满足查询的分区。

例如,假设您按日期字段每月对表进行分区,并且表中有 6 个月的数据。如果查询 OCT-2012 的一周范围内的日期,查询优化器会抛出 6 个分区中的 5 个,只扫描 2012 年 OCT 月份有记录的分区。

有关更多详细信息,请查看MySQL 分区页面。它为您提供了所有必要的信息,并为我在上面的“分区修剪”部分中描述的内容提供了一个更完整的示例。

请注意,我建议在新的分区表中创建/克隆您的表并执行查询以测试结果以及它是否满足您的要求。如果您还没有索引日期列,那应该是您的第一步,测试,如果需要检查分区。

于 2012-10-16T19:59:22.070 回答
1

通常,您在检索结果之前应用某种条件。如果您没有任何要过滤的内容,则可能要使用LIMITand OFFSET

SELECT * FROM table_name WHERE date BETWEEN ? AND ? LIMIT 1000 OFFSET 1000

通常,您会LIMIT在特定页面上显示任何数量的记录。

于 2012-10-16T19:49:00.640 回答