选择mysql限制的批量记录查询

时间:2016-01-15 05:47:43

标签: php mysql

我需要select查询的帮助。

我有一张包含数百万条记录的表格,我使用过:

 select * from table where status=1 limit $start,$pagesize 

用于分页,因此每页加载25条记录。

我担心的是,当我在表中运行包含数千条记录的查询时,加载时间是可以接受的,但只要我使用批量记录运行查询,加载时间就会增加。

所以我试图找到一种方法,现在我想从表格中只显示2500条最新记录,限制为0到25。

select * from (select * from table 
where status=1 order by id  limit  0,2500)t  
where status=1 order by id limit $start,$pagesize

但加载时间不受影响。

有人可以建议更好的方式吗?

我正在使用索引,并在表上有状态和id字段的索引。

2 个答案:

答案 0 :(得分:0)

LIMIT很难优化in the case that an offset is specified

由于您有id上的索引,而且您是ORDER BY id,您实际上可以通过将LIMIT中的偏移量替换为{{1}来直接使用索引}}:

WHERE

也就是说,不是使用(页码*页面大小)作为SELECT * FROM table WHERE status=1 AND id > $lastIDRetrieved LIMIT $pageSize 中的偏移量,而是使用您收到的最后一个LIMIT,从而直接使用{{1上的索引}}

答案 1 :(得分:0)

正如我的另一位朋友所说,是的,它很难优化LIMIT。我建议你实施两件我希望这些能帮助你的事情。

  1. 在状态列上添加索引为:

    ALTER TABLE table ADD INDEX index_namestatus);

  2. 确保id列是表的Primary Key,因为PK比其他键更快。

  3. 更新1:

    使用EXPLAIN,检查正在提取的行数或正确使用索引进行查询?

    EXPLAIN select * from table where status=1