【发布时间】:2017-08-27 11:43:38
【问题描述】:
假设我有一个包含 10 000 行的表。一些用户(例如在网站上)希望使用此表应用一些 where 条件和 order by 条件。
变体 #1 - 使用 sql 限制和常规分页
据我了解,数据库必须 1)找到所有(!)满足 where 条件的行,2)数据库必须对所有(!)在步骤 1 找到的行进行排序,并从这些找到的行中 3)它必须返回一些由限制和偏移定义的集合。
变体 #2 - 读取列表结构中的所有 id
另一种解决方案是进行第一次查询以获取某些条件的 id 列表并按条件排序并保存。对于每个页面,我们都会得到 id 在 {..} 中的行,并在客户端按我们拥有的列表进行排序(因为数据库将以未排序的顺序返回行)。此变体的优点是不会对每一页的所有行进行过滤和排序。缺点是需要保存相当长的列表。此外,仅当数据不经常更改时才能使用此变体。
我对变体 #1 的理解正确吗?变体 #2 是在实践中使用还是不好的解决方案?
【问题讨论】:
标签: sql database pagination