3 回答

TA贡献1827条经验 获得超9个赞
从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导致一些优化被禁用。

TA贡献1712条经验 获得超3个赞
考虑到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。
添加回答
举报