如何在SQL中实现分页查询?OFFSET与FETCH的正确用法

上周跟你讲过SQL分页的用法。

核心是ORDER BY + OFFSET + FETCH NEXT。

比如: sql SELECT ProductID, ProductName, Price FROM Products ORDER BY Price DESC, ProductID ASC OFFSET 1 0 ROWS FETCH NEXT 1 0 ROWS ONLY;
这是获取第二页(每页1 0条,页码从0开始)的数据。

但要注意几点: 1 . 必须加ORDER BY。
不加的话,每次结果顺序不一样。
2 . OFFSET太大时(比如OFFSET 1 00000),性能会很差,因为要扫描很多行。

更好的方法是键集分页: sql -
假设上一页最后ID是1 00 SELECT ProductID, ProductName, Price FROM Products WHERE ProductID > 1 00 ORDER BY ProductID ASC FETCH NEXT 1 0 ROWS ONLY;
这样直接从上一页的ID开始查,快很多。

如果数据量大,建议给ORDER BY的列建索引。

具体怎么选?
数据量小:用OFFSET/FETCH就行。

要加载很多页:用键集分页。

数据变动少:可以缓存结果。

你看着办。

这代码是百度知道的加载脚本。
里面有很多 JS 文件和库。
包括 jQuery、tangram 等。
用于页面功能加载和交互。
具体细节看每个文件路径和功能。
你自己掂量。

2 02 3 年1 0月1 2 日。
我在北京。
我朋友说这个是百度知道的后台代码。