首页 > 解决方案 > 排序表的分页

问题描述

我尝试进行有效的分页。我有很多表有很多记录。最大的一个目前有大约 40000 条记录,并且将来会增加。这些表具有这样的结构(例如):

order | type | item | price | quantity | packingunit | totalquantity

这些表可以按所有显示的列排序,当然它们都有一个 ID,它也是主键和自动增量。

问题是,随着数据量的增加,查询会越来越慢。目前查询看起来像(例如):

... LIMIT 10000, 25

我想摆脱 OFFSET 并找到一种更快的方法来获取每个页面的结果。

我阅读了几篇博客以及关于这个问题的 stackoverflow。有一些方法可以实现有效的分页

... WHERE id > 10000 LIMIT 25

但这仅在您按 ID 对表进行排序时才有效。正如我所提到的,我的表格可以按每一列排序。我考虑过读取缓存中的 ID(排序后)并始终查询要在被调用页面上显示的 25 个 ID,但这似乎也是一种不太有效的方法。

有谁知道如何解决这个问题?

标签: mysqlpaginationpaging

解决方案


我怀疑任何头脑正常的人都会浏览 400 页。最多会停在40。

所以这让我觉得这样一个深度分页的唯一用户是搜索引擎。因此,我建议有两个分页系统。WHERE id > xxx默认情况下,它按 id 排序,并允许使用技巧翻阅所有页面直到最后。

但是,一旦使用任何其他字段进行排序,分页就会停在某个合理的页码处,并说“找到的结果太多,请优化您的搜索”。


推荐阅读