我想在 AWS Athena 上运行一个同时包含LIMIT
和OFFSET
子句的查询。我认为前者得到支持,而后者不支持。有没有办法使用其他方法模拟此功能?
使用OFFSET
进行分页效率非常低,特别是对于像 Presto 这样经常必须执行全表或分区扫描的分析数据库。 此外,查询之间的结果不一定一致,因此在页面之间导航时可能会有重复或缺失的结果。
在像MySQL或PostgreSQL这样的OLTP
数据库中,最好对索引使用范围查询,在其中跟踪上一页上看到的最后一个值。
在像 Presto 这样的OLAP
数据库中,最好缓存结果集并使用缓存的数据执行分页。您不希望每次用户单击以转到其他页面时都对数十亿或数万亿行运行昂贵的查询。
有关问题和索引方法的较长说明,请参阅以下文章:
- http://use-the-index-luke.com/no-offset
- http://use-the-index-luke.com/sql/partial-results/fetch-next-page