mysql - 哪个最快? SELECT SQL_CALC_FOUND_ROWS FROM `table` 或 SELECT COUNT(*)

标签 mysql optimization

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

方法一

包括 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 性能博客文章:To SQL_CALC_FOUND_ROWS or not to SQL_CALC_FOUND_ROWS?

简单总结一下:Peter 说这取决于您的索引和其他因素。该帖子的许多评论似乎都说 SQL_CALC_FOUND_ROWS 几乎总是比运行两个查询慢 - 有时慢 10 倍。

关于mysql - 哪个最快? SELECT SQL_CALC_FOUND_ROWS FROM `table` 或 SELECT COUNT(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186588/

相关文章:

mysql - 从表中删除每个重复值之一,哪一个是正确的 DELETE 语句?

MySQL 组合来自三个查询的数据

php - 如何为行添加值?

mysql - 如何在另一个 SQL 查询中使用 SQL 查询的结果

postgresql - 我应该使用分片吗?

r - 使用 mapply() 进行列行比较

java - 搜索多树数据结构的最有效方法

Mysql优化避免表扫描

mysql - BIT(1) 与 ENUM ('unknown' , 'male' , 'female' ) 在 MySQL 中

mysql - 如何通过 shell 命令从 MySQL 转储中恢复单个特定列?