Mysql 庞大的数据集,按日期和限制排序
我有一个MySQL表,有大约3.5mio行。我想迭代每一行。因为我不想加载所有3.5mio行,所以我将查询拆分为几个小的行。对于拆分,我使用日期字段 现在的问题是:当我从表格中选择大于指定日期的行时,它仍然会关注每个日期,将它们放在临时列表中,并削减90%的条目,因为我只需要小部分Mysql 庞大的数据集,按日期和限制排序,mysql,sql-order-by,limit,Mysql,Sql Order By,Limit,我有一个MySQL表,有大约3.5mio行。我想迭代每一行。因为我不想加载所有3.5mio行,所以我将查询拆分为几个小的行。对于拆分,我使用日期字段 现在的问题是:当我从表格中选择大于指定日期的行时,它仍然会关注每个日期,将它们放在临时列表中,并削减90%的条目,因为我只需要小部分 如何创建查询,使我的计算机在加载整个表时不会崩溃?简单的回答是,使用索引而不是需要文件排序操作来确保满足您的ORDER BY 您可以使用解释选择。。。以获取查询计划 EXPLAIN SELECT t.* FROM
如何创建查询,使我的计算机在加载整个表时不会崩溃?简单的回答是,使用索引而不是需要文件排序操作来确保满足您的
ORDER BY
您可以使用解释选择。。。以获取查询计划
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\u at IS NOT NULL
谓词。在随后的执行中,您将传入最后一行的列中的值,以便从该点开始下一次查询。您的表上有索引吗?还没有。是否建议在“我的日期”列上使用索引?我的建议是首先尝试使用索引,看看它是否对您的查询有任何改进。我猜会的。