Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 庞大的数据集,按日期和限制排序_Mysql_Sql Order By_Limit - Fatal编程技术网

Mysql 庞大的数据集,按日期和限制排序

Mysql 庞大的数据集,按日期和限制排序,mysql,sql-order-by,limit,Mysql,Sql Order By,Limit,我有一个MySQL表,有大约3.5mio行。我想迭代每一行。因为我不想加载所有3.5mio行,所以我将查询拆分为几个小的行。对于拆分,我使用日期字段 现在的问题是:当我从表格中选择大于指定日期的行时,它仍然会关注每个日期,将它们放在临时列表中,并削减90%的条目,因为我只需要小部分 如何创建查询,使我的计算机在加载整个表时不会崩溃?简单的回答是,使用索引而不是需要文件排序操作来确保满足您的ORDER BY 您可以使用解释选择。。。以获取查询计划 EXPLAIN SELECT t.* FROM

我有一个MySQL表,有大约3.5mio行。我想迭代每一行。因为我不想加载所有3.5mio行,所以我将查询拆分为几个小的行。对于拆分,我使用日期字段

现在的问题是:当我从表格中选择大于指定日期的行时,它仍然会关注每个日期,将它们放在临时列表中,并削减90%的条目,因为我只需要小部分


如何创建查询,使我的计算机在加载整个表时不会崩溃?

简单的回答是,使用索引而不是需要文件排序操作来确保满足您的
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
谓词。在随后的执行中,您将传入最后一行的列中的值,以便从该点开始下一次查询。

您的表上有索引吗?还没有。是否建议在“我的日期”列上使用索引?我的建议是首先尝试使用索引,看看它是否对您的查询有任何改进。我猜会的。