面试题答案
一键面试目的
SQL_CALC_FOUND_ROWS
的目的是在执行 LIMIT
子句限制返回行数的同时,获取符合查询条件的总行数,而无需再次执行相同的查询。这样可以避免重复计算满足条件的总行数,提高效率。
业务场景
- 分页场景:当需要在分页展示数据时,除了返回当前页的数据,还需要知道总页数。如果每次分页查询都单独执行一个统计总行数的查询,开销较大。使用
SQL_CALC_FOUND_ROWS
可在一次查询中获取当前页数据和总行数,减少数据库压力。 - 动态查询结果统计:在某些动态查询场景下,需要根据查询条件动态获取满足条件的总行数,同时展示部分数据。使用
SQL_CALC_FOUND_ROWS
能减少查询次数,优化性能。
使用示例
假设我们有一个 users
表,包含 id
、name
等字段。
-- 查询第一页,每页10条数据,并获取符合条件的总行数
SELECT SQL_CALC_FOUND_ROWS id, name FROM users LIMIT 0, 10;
-- 获取符合条件的总行数
SELECT FOUND_ROWS();
上述代码中,第一条查询语句获取了第一页10条用户数据,并标记计算符合条件的总行数。第二条查询语句通过 FOUND_ROWS()
函数获取这个总行数。