FOUND_ROWS

原文地址:https://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

一个包含limit的select语句限制了返回的数据条数,但有些情况下我们想同时获取除去limit后匹配的行数,但又不想多次执行select语句,此时可以在select语句中增加SQL_CALC_FOUND_ROW选项,然后调用FOUND_ROWS()函数:

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

第二个select语句返回了第一个select语句匹配的行数。

如果select语句没有使用SQL_CALC_FOUND_ROWS选项,使用FOUND_ROWS()将获得select返回的行数。如果select使用了limit从句,FOUND_ROWS() 返回的数据为limit匹配的最大值,比如: 使用”LIMIT 10”时返回10,使用使用”LIMIT 50,10”时返回60.

FOUND_ROWS()获取的值是瞬时值,其只会关联最后一条select语句。如果接下来需要使用这个值,需要将它保存到一个变量里面:

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ;
mysql> SET @rows = FOUND_ROWS();

如果你使用了SELECT SQL_CALC_FOUND_ROWS,MySQL会计算全量结果匹配的行数。尽管如此,也比重新执行查询语句要快,因为这涉及到服务器与客户端之间的交互。

SQL_CALC_FOUND_ROWS 和 FOUND_ROWS()对限定返回数据量并需要匹配的总行数的情况非常有帮助,比如在web页面分页显示查询结果的时候。

在UNION语句中使用SQL_CALC_FOUND_ROWS 和 FOUND_ROWS()要比简单的SELECT语句中使用复杂很多,因为可以在多个UNION语句中使用LIMIT从句。它可能作用于UNION中的单个select语句,也可能是整个UNION语句 。

在不含全局LIMIT从句的UNION语句中使用SQL_CALC_FOUND_ROWS的条件如下:

  • SQL_CALC_FOUND_ROWS必须在第一个select语句上。
  • FOUND_ROWS()的值只在UNION ALL中是准确,否则由于去重只能得到一个近似值。
  • 如果没有使用LIMIT从句,SQL_CALC_FOUND_ROWS会被忽略,返回的值是UNION语句创建的临时表中的行数。
  • 除了上述情况外,FOUND_ROWS()是未定义的。

注意
FOUND_ROWS()在statement-based模式下是不一定准确的,在row-based模式下可以使用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值