可以将MySQL SQL_CALC_FOUND_ROWS和FOUND_ROWS()用作一个查询吗?

时间:2016-11-22 20:13:23

标签: mysql

可以将SELECT SQL_CALC_FOUND_ROWS和FOUND_ROWS()用作一个查询吗?

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users LIMIT 0,50';
    mysql_query($query);
    $count_query = 'SELECT FOUND_ROWS()';
    mysql_query($query);

如果不是 - 那么重点是什么? 为什么不直接使用这两个查询?

$query = 'SELECT * FROM Users LIMIT 0,50';
$count_query = 'SELECT COUNT(*) FROM Users';

好处? 缺点? 差异?

我更喜欢的是,只进行一次调用 - 使用限制 - 以及一列具有表中所有记录的总记录数。

如果不可能 - 我想了解上述两种方法之间的区别。

1 个答案:

答案 0 :(得分:2)

不同之处在于SELECT COUNT(*) FROM Users必须计算行数。对于某些数据库引擎,这可能很昂贵(MyISAM会将表大小保留在元数据中,因此它很便宜)。由于上一个查询已经必须扫描所有行,并且您告诉它要记住计数,FOUND_ROWS()只返回保存的计数。

但是,除非您在第一个查询中使用LIMIT,否则使用FOUND_ROWS()几乎没有意义。你可以简单地使用:

$result = mysql_query($query);
$row_count = mysql_num_rows($result);

SQL_CALC_FOUND_ROWS的主要好处是查询包含LIMIT子句。 FOUND_ROWS()返回没有该选项时返回的总行数。这对于分页非常有用,因为您可以从中计算总页数,而无需执行使用COUNT(*)的其他查询。