MST

星途 面试题库

面试题:MySQL中SQL_CALC_FOUND_ROWS的基本用法及优化场景

请阐述在MySQL中使用SQL_CALC_FOUND_ROWS的目的是什么,以及在什么样的业务场景下会考虑使用它来优化查询?同时给出一个简单的使用示例。
33.2万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

目的

SQL_CALC_FOUND_ROWS 的目的是在执行 LIMIT 子句限制返回行数的同时,获取符合查询条件的总行数,而无需再次执行相同的查询。这样可以避免重复计算满足条件的总行数,提高效率。

业务场景

  1. 分页场景:当需要在分页展示数据时,除了返回当前页的数据,还需要知道总页数。如果每次分页查询都单独执行一个统计总行数的查询,开销较大。使用 SQL_CALC_FOUND_ROWS 可在一次查询中获取当前页数据和总行数,减少数据库压力。
  2. 动态查询结果统计:在某些动态查询场景下,需要根据查询条件动态获取满足条件的总行数,同时展示部分数据。使用 SQL_CALC_FOUND_ROWS 能减少查询次数,优化性能。

使用示例

假设我们有一个 users 表,包含 idname 等字段。

-- 查询第一页,每页10条数据,并获取符合条件的总行数
SELECT SQL_CALC_FOUND_ROWS id, name FROM users LIMIT 0, 10;
-- 获取符合条件的总行数
SELECT FOUND_ROWS(); 

上述代码中,第一条查询语句获取了第一页10条用户数据,并标记计算符合条件的总行数。第二条查询语句通过 FOUND_ROWS() 函数获取这个总行数。