有时候会遇到数据过多需要分页的情形(如论坛的楼盖太高),通常是SQL_1先做COUNT,接着SQL_2做SELECT和LIMIT;此外还有一种方法是LIMIT的同时一起计算总数据量(没有被LIMIT的数量),效率略低于前述SQL_2但优于SQL_1 + SQL_2的总和。
MySQL
SELECT *, SQL_CALC_FOUND_ROWS
FROM users
WHERE /* whatever */
LIMIT ?, ?;
SELECT FOUND_ROWS();
PostgreSQL
SELECT *, count(*) OVER() AS full_count
FROM tbl
WHERE /* whatever */
ORDER BY col1
LIMIT ?
OFFSET ?