【发布时间】:2012-04-23 19:58:36
【问题描述】:
我正在尝试将用户提交的信息分页到目录中。起初我有这样的事情: /?page=3&count=20&sort=date
$floor = ($page-1)*$count;
$ceiling = $count;
SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling
正如我所读到的,这很糟糕,因为它会计算所有结果,而不是停留在极限(地板+天花板)。
现在,我正在尝试通过针对页面上的最后一项进行分页来加快速度
/?last_date=2012&count=20&sort=date
$ceiling = $count;
SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT $ceiling
但是,这行不通?有些日期将是相同的。为了争论,让我们假设我不能使用更精确的时间戳。例如按价格排序只会到小数点后 2 位,肯定会有重叠。
我可以做些什么来使这项改进发挥作用,或者我应该恢复到以前的查询吗?
【问题讨论】:
-
您的第一种方法对我来说看起来不错。你能说清楚你为什么说错了吗?
-
离题,但我建议升级到使用 Jquery 进行分页。
-
我同意@GustavoVargas,你为什么放弃你的第一个实现?我同意 Norse 的观点,您可能正在重写可以从框架中实现的功能。
-
在 MySQL 中使用 LIMIT 关键字并不妨碍它读取前面的记录。例如:SELECT * FROM my_table LIMIT 10000, 20;意味着 MySQL 仍然会读取前 10000 条记录并在生成我们之后的 20 条记录之前将它们丢弃。因此,在对大型数据集进行分页时,高页码意味着较长的加载时间。