巨大的数据集,ORDER BY日期和限制

时间:2012-07-09 21:32:49

标签: mysql sql-order-by limit

我有一个带有~3.5mio线的MySQL表。我想迭代每一行。由于我不想加载所有3.5mio线,我将查询分成小块。对于拆分我正在使用日期字段。

现在的问题是:当我从表中选择大于指定日期的行时,它仍然会查看每个日期,将它们放在临时列表中,而不是90%的条目,因为我只想要小部件

如何创建我的查询以便我的计算机不崩溃它会加载整个表?

1 个答案:

答案 0 :(得分:1)

简短的回答是确保使用索引可以满足ORDER BY,而不需要文件输出操作。

您可以使用EXPLAIN SELECT ...来获取查询计划。

EXPLAIN
SELECT t.*
  FROM mytable t FORCE INDEX FOR ORDER BY (mytable_IX1)
 WHERE t.created_at > @last_created_at
    OR t.created_at = @last_created_at AND t.id > @last_id
 ORDER BY t.created_at, t.id
 LIMIT 1000


id select_type table  type  possible_keys key         key_len ref    rows Extra        
-- ----------- ------ ----- ------------- ----------- ------- ------ ---- -------------
 1 SIMPLE      t      range mytable_IX1   mytable_IX1 13      (NULL) 1000 Using where; Using index

在第一次执行时,您只需要一个t.created_at IS NOT NULL谓词。在后续执行中,您将从您提取的最后一行的列中传入值,因此您将从该点开始下一个查询。