SQL_CALC_FOUND_ROWS
是MySQL中的一个特殊修饰符(modifier),用于执行在应用LIMIT分页限制的同时获取符合条件的总行数,而不仅仅是返回查询结果的部分数据。
通常情况下,当我们使用 LIMIT
条件来限制查询结果的数量时,数据库只会返回满足条件的前N行数据,而不会告诉你总共有多少行符合查询条件。这对于实现分页功能时可能会有问题,因为你无法知道总共有多少行数据,从而无法生成正确的分页导航。
SQL_CALC_FOUND_ROWS
的作用就在于解决这个问题。当在查询中使用了 SQL_CALC_FOUND_ROWS
修饰符时,MySQL会在执行查询时同时计算符合条件的总行数,而不是在返回结果之后再进行额外的查询来计算总行数。
用法示例:
假设有一个名为 t_account
的表,我们要查询其中 deleted='no'
的数据,并使用 LIMIT
来限制结果的数量。如果想同时获取符合条件的总行数,可以这样写
SELECT SQL_CALC_FOUND_ROWS accountid
FROM t_account
WHERE deleted = 'no'
ORDER BY accountid DESC
LIMIT 0, 10;
上述查询将返回满足条件的 accountid
列的前10行数据,并通过执行 SELECT FOUND_ROWS();
来获取符合条件的总行数。
SELECT FOUND_ROWS();
这个语句将返回之前查询的总行数,而不是实际结果的行数。这样,我们就可以在实现分页导航时,知道总共有多少行数据,从而正确地生成分页链接。
SELECT FOUND_ROWS();
不会再次查询数据库。当你在查询中使用了 SQL_CALC_FOUND_ROWS
修饰符时,MySQL会在执行原始查询时同时计算符合条件的总行数,并将其存储在内部的状态中。随后,当你执行 SELECT FOUND_ROWS();
这个语句时,MySQL会从内部状态中获取之前计算得到的总行数,而不会再次查询数据库。
这种处理方式相比于再次执行相同的查询来获取总行数,能够避免额外的数据库开销,提高了查询性能。它特别适用于在实现分页功能时,你可以获取总行数来计算总页数,而无需再次查询获取符合条件的行数。