mysql SELECT FOUND_ROWS()与COUNT(*)用法区别

sunshine技术博客 sunshine技术博客

在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别.

SELECT语句中经常可能用LIMIT限制返回行数,有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句,那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了,代码如下:

  1. mysql>SELECTSQL_CALC_FOUND_ROWS*FROMtbl_name
  2. ->WHEREid>100LIMIT10;
  3. mysql>SELECTFOUND_ROWS();

COUNT(*) 的稍微不同之处在于,它返回检索行的数目,不论其是否包含 NULL值.

SELECT 从一个表中检索,而不检索其它的列,并且没有 WHERE子句时,COUNT(*)被优化到最快的返回速度,例如:

mysql> SELECT COUNT(*) FROM tablename;

这个优化仅适用于 MyISAM表, 原因是这些表类型会储存一个函数返回记录的精确数量,而且非常容易访问。对于事务型的存储引擎(InnoDB, BDB), 存储一个精确行数的问题比较多,原因是可能会发生多重事物处理, 而每个都可能会对行数产生影响。

COUNT(DISTINCT expr,[expr...]),返回不同的非NULL值数目。

若找不到匹配的项,则COUNT(DISTINCT)返回 0.

PHP代码如下:

  1. <?php
  2. $sql="selectcount(*)fromt";
  3. $res=mysql_query($sql);
  4. $num=mysql_result($res,0);
  5. $sql="selecttopic,detailfromtlimit5";
  6. //***以下我就不写了
  7. ?>

然而用mysql自带函数found_rows();也可以快速求出总数,PHP代码如下:

  1. <?php
  2. $sql="selectsql_calc_found_rowstopic,detailfromtlimit5";
  3. $sql="selectfound_rows()";//phpfensi.com
  4. $num=mysql_result($res,0);
  5. ?>

这种方法使用时所要注意的问题.

引用:

1 必须以select sql_calc_found_rows 开头

2 这时found_rows() 为 没有limite 时的行数

以下为一个演示,希望大家看了更加明白,PHP代码如下:

  1. mysql>selectcount(*)fromzd_sort2;
  2. +----------+
  3. |count(*)|
  4. +----------+
  5. |20|
  6. +----------+
  7. 1rowinset(0.14sec)
  8. mysql>selectsql_calc_found_rowsst2_idfromzd_sort2limit3;
  9. +--------+
  10. |st2_id|
  11. +--------+
  12. |1|
  13. |6|
  14. |12|
  15. +--------+
  16. 3rowsinset(0.00sec)
  17. mysql>selectfound_rows();
  18. +--------------+
  19. |found_rows()|
  20. +--------------+
  21. |20|
  22. +--------------+
  23. 1rowinset(0.00sec)
  24. mysql>

这两中方法效率如何呢.

相关广告
  • mysql SELECT FOUND_ROWS()与COUNT(*)用法区别 mysql SELECT FOUND_ROWS()与COUNT(*)用法区别 mysql SELECT FOUND_ROWS()与COUNT(*)用法区别
相关阅读

mysql SELECT FOUND_ROWS()与COUNT(*)用法区别

2019/10/10 17:35:08 | 谷歌SEO算法 | SEO