【问题标题】:Codeigniter pagination avoid LIMIT with OFFSETCodeigniter 分页避免使用 OFFSET 限制
【发布时间】:2011-11-01 23:19:27
【问题描述】:

在 codeigniter 分页检索行时,是否有避免使用 LIMIT $page,$offset 的方法?

当我在检索例如 LIMIT 300000,45 时对 milions 记录使用带偏移量的限制时,查询需要大约 6 秒,然后检索 LIMIT 45,45

对记录进行分页的最佳和最快方法是什么?

谢谢:)

我的桌子是这样的:

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

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

SELECT * FROM table ORDER_BY username ASC LIMIT 300000,45

【问题讨论】:

  • 您的表是什么样的,您使用的 SQL 是什么(包括与 LIMIT 一起使用的 ORDER BY 子句),以及您定义了哪些索引?

标签: php sql codeigniter pagination


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,我添加了索引,现在更好,但仍然很慢,偏移量为 100 万:P
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2014-02-14
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多