mysql SQL_CALC_FOUND_ROWS 特性: 一条 sql 语句同时查出总数及分页结果

介绍了如何通过利用 mysql SQL_CALC_FOUND_ROWS 特性, 在一条 sql 语句里同时查出总数及分页结果

展示分页列表是一个常见的开发需求, 需要查询出总数及分页数据.

传统分页查询做法

传统上, 这个一般是通过两条 sql 去实现. 先是查询总数, 比如这样:

select count(*) from programmer where age >= 35;

然后再查分页结果:

select * from programmer where age >= 35 limit 0, 10;

如果是简单的查询还好, 但对于一些复杂的涉及很多条件的查询, 往往需要重复那些条件.

注: 在 mybatis 中, 你可以把公共的条件抽取出来做成一个可复用模块, 不过这样一来结构就相对复杂了, 也不是那么直观.

那么, 是否有方式可以避免上述麻烦, 一条语句就可以查出总数及分页结果呢? 那就要用到 mysql 里的 SQL_CALC_FOUND_ROWS 特性了.

继续阅读

如果均可以的情况下, 存储时间应该优先使用 timestamp 而不是 datetime, 因为前者只需 4 字节, 而后者需 8 字节.

在插入记录时, 如果没有为第一个 timestamp 列指定值时, 会自动设置为当前时间;

更新记录时, 也会默认自动更新第一个 timestamp 列(除非 update 中另外指定了值).

--<<高性能 MySql>>

http 协议的首部 referer 是一个极为著名的拼写错误, 正确的写法应该是 referrer, 两个 r, 意思是推荐人. 这一错误令世界各地以英语为母语的文字编辑们万分沮丧, 不过当发现这个错误时, 它已经写入了标准之中, 且被广泛使用, 使得纠正它的代价太大.

referer 首部的具体含义是: "用户是从这个页面上依照链接跳转过来的". 当你从 A 网站里的一个链接跳到 B 网站时, 在这个请求里, A 网站就是 referer 的值, 相当于 A 推荐了 B.

因为 referer 这个首部可以用于跟踪用户的访问并应用于改善广告等的推荐, 也因此被很多用户认为是对隐私的侵犯, 许多用户不喜欢甚至会禁用这一特性.

有人对 referer 这个拼写错误不以为然, 甚至赞扬说, 因为少了个 r, 考虑到整个网络每天如此之多的 http 请求, 它因此节省了很多字节与带宽.

-- <<HTTP 权威指南>>