当您限制通常用于分页的SQL查询返回的行数时,有两种方法可以确定记录的总数:

方法1

在原始SQL_CALC_FOUND_ROWS中包括SELECT选项,然后通过运行SELECT FOUND_ROWS()获得总行数:

SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();

方法二

正常运行查询,然后通过运行SELECT COUNT(*)获取总行数
SELECT * FROM table WHERE id > 100 LIMIT 10;
SELECT COUNT(*) FROM table WHERE id > 100;

哪种方法最好/最快?

最佳答案

这取决于。请参阅有关此主题的MySQL Performance Blog文章:To SQL_CALC_FOUND_ROWS or not to SQL_CALC_FOUND_ROWS ?
简要介绍一下:Peter说,这取决于您的索引和其他因素。帖子中的许多评论似乎都说SQL_CALC_FOUND_ROWS几乎总是比运行两个查询慢-有时甚至慢10倍。

07-28 01:10
查看更多