从MySQL 8.0.17开始,SQL_CALC_FOUND_ROWS查询修饰符和随附的FOUND_ROWS()函数已弃用,并将在以后的MySQL版本中删除。作为替代,考虑使用LIMIT执行查询,然后再使用COUNT(*)且不使用LIMIT执行第二个查询,以确定是否还有其他行。例如,代替这些查询:SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;SELECT FOUND_ROWS();请改用以下查询:SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;SELECT COUNT(*) WHERE id > 100;COUNT(*)受到某些优化。SQL_CALC_FOUND_ROWS导致一些优化被禁用。
考虑到SQL_CALC_FOUND_ROWS需要调用FOUND_ROWS()之后,如果你想获取总数有,而不必调用第二从限制返回的结果SELECT,我会使用JOIN源于一个结果子查询:SELECT * FROM `table` JOIN (SELECT COUNT(*) FROM `table` WHERE `category_id` = 9) t2 WHERE `category_id` = 9 LIMIT 50注意:每个派生表必须具有自己的别名,因此请确保命名连接表。在我的示例中,我使用t2。