假设我有一个包含10 000行的表。某些用户(例如在网站上)希望使用此表来应用某些条件和条件顺序。
变体#1 - 使用sql限制和通常的分页
据我所知,数据库必须1)找到满足条件的所有(!)行,2)数据库必须在步骤1中对所有(!)找到的行进行排序,并从这些找到的行3)它必须返回由limit和offset定义的一些集合。
变体#2 - 读取列表结构中的所有ID 另一种解决方案是进行第一次查询以获取某些条件的ID列表并按条件排序并保存。对于每个页面,我们得到{}}中id的行,并在客户端按列表排序(因为数据库将以未排序的顺序返回行)。此变体的优点是不对每个页面的所有行进行过滤和排序。缺点是需要保存相当长的列表。此外,只有在数据不经常更改的情况下才能使用此变体。
我对变体#1的理解是对的吗?变量#2是否在实践中使用,或者它是不好的解决方案?
答案 0 :(得分:1)
变体1是接近此的“正常”方式。在许多情况下,你会对它的工作效果感到惊讶。以下是一些原因:
第二种方法有一些缺点:
order by
,这可能并不比第一次运行Variant 1贵。那就是说,在某些情况下,变体2可能是最好的解决方案。但是,更典型的解决方案是让数据库处理分页。