Codeigniter分页避免使用OFFSET限制

时间:2011-08-23 13:31:30

标签: php sql codeigniter pagination

在codeigniter分页中检索行时,有没有避免使用LIMIT $ page,$ offset?

当我在检索例如LIMIT 300000,45时使用带有偏移的百分比记录时,查询大约需要6秒钟,然后检索LIMIT 45,45

哪种分页记录最好,最快?

谢谢:)

我的表看起来如此:

id(自动)|用户名|密码|电子邮件

我使用了一个简单的查询:

SELECT * FROM table ORDER_BY username ASC LIMIT 300000,45

2 个答案:

答案 0 :(得分:3)

LIMIT 45, 45的情况下,您选择的是45行,偏移量为45,而LIMIT 45, 300000则限制偏移量为45的行。这可以解释速度问题。

答案 1 :(得分:3)

不幸的是,由于限制如何工作,基本上需要遍历结果集并找到第N个项目(在本例中为300,000)。这是O(n)操作。当然,它是通过一个数据库来完成的,所以效率要高得多,但仍然是O(n),100万的偏移仍然比偏移量1慢。

现在,您可以通过在用户名上放置索引来加快速度。我的猜测是,目前没有一个可以解释两次之间的一些差异,但无论你还需要查看300k记录,所以即使c在O(C中非常小) * n),它仍然是O(n)。