关于分页的问题SQL_CALC_FOUND_ROWS

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会从内部状态中获取之前计算得到的总行数,而不会再次查询数据库。

这种处理方式相比于再次执行相同的查询来获取总行数,能够避免额外的数据库开销,提高了查询性能。它特别适用于在实现分页功能时,你可以获取总行数来计算总页数,而无需再次查询获取符合条件的行数。

你可能感兴趣的:(mysql,数据库)