在codeigniter分页中检索行时,有没有避免使用LIMIT $ page,$ offset?
当我在检索例如LIMIT 300000,45时使用带有偏移的百分比记录时,查询大约需要6秒钟,然后检索LIMIT 45,45
哪种分页记录最好,最快?
谢谢:)
我的表看起来如此:
id(自动)|用户名|密码|电子邮件
我使用了一个简单的查询:
SELECT * FROM table ORDER_BY username ASC LIMIT 300000,45
答案 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)。