可以将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';
好处? 缺点? 差异?
我更喜欢的是,只进行一次调用 - 使用限制 - 以及一列具有表中所有记录的总记录数。
如果不可能 - 我想了解上述两种方法之间的区别。
答案 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(*)
的其他查询。