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

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

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

 代码如下 复制代码

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name

-> WHERE id > 100 LIMIT 10;

mysql> SELECT FOUND_ROWS();

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

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

 代码如下 复制代码

mysql> SELECT COUNT(*) FROM tablename;

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

COUNT(DISTINCT expr,[expr...])

返回不同的非NULL值数目。

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

PHP代码:

 代码如下 复制代码

<?php

$sql = "select count(*) from t";

$res = mysql_query($sql);

$num = mysql_result($res,0);

$sql =  "select topic,detail from t limit 5";

//***以下我就不写了

?>

然而用mysql自带函数found_rows();

也可以快速求出总数
PHP代码:

 代码如下 复制代码

<?php

$sql =  "select sql_calc_found_rows topic,detail from t limit 5";

$sql =  "select found_rows()";

$num = mysql_result($res,0);

?>

这种方法使用时所要注意的问题
引用:
1 必须以select sql_calc_found_rows 开头
2 这时found_rows() 为 没有limite 时的行数
以下为一个演示 希望大家看了更加明白
PHP代码:

 代码如下 复制代码

mysql> select count(*) from zd_sort2;

+----------+

| count(*) |

+----------+

|       20 |

+----------+

1 row in set (0.14 sec)

mysql> select sql_calc_found_rows st2_id  from zd_sort2 limit 3;

+--------+

| st2_id |

+--------+

|      1 |

|      6 |

|     12 |

+--------+

3 rows in set (0.00 sec)

mysql> select found_rows();

+--------------+

| found_rows() |

+--------------+

|           20 |

+--------------+

1 row in set (0.00 sec)

mysql>

着两中方法效率如何呢

时间: 2024-10-22 02:14:53

mysql SELECT FOUND_ROWS()与COUNT(*)用法区别的相关文章

php学习之道:mysql SELECT FOUND_ROWS()与COUNT(*)用法区别

在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别 SELECT语句中经常可能用LIMIT限制返回行数.有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句.那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了:  代码如下 复制代码 mysql> SELECT SQL_CA

MySQL SELECT xxx INTO OUTFILE用法

1.导出数据报错 mysql> SELECT * INTO OUTFILE '/tmp/t.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM t; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this st

MySQL之——10个select语句的简单用法

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47610159 本篇文章主要讲述的是MySQL SELECT句法的简单分析,我们大家都知道MySQL数据库是我们大家经常使用的数据库,其相关的应用也是备受关注的,那么以下的文章主要是对MySQL SELECT句法的简单分析. 1.select语句可以用回车分隔 $sql="select * from article where id=1" 和 $sql="sel

MySQL数据库中的count的用法

1.概念 在开发系统的时候,可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢.然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗. 2.count(*)实现方式 在不同的MySQL引擎中,count(*)有不同的实现方式. 1)MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count

mysql中的count(primary_key)、count(1)、count(*)的区别

表结构如下: mysql> show create table user\G; *************************** 1. row *************************** Table: user Create Table: CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `pwd` varchar(50) NOT N

mysql select count(filed) 问题(where条件没有数据匹配的话也有数据返回)。

问题: SELECT count(*),user_id FROM tb_rp_logintrace WHERE id=-1 返回结果: count(*), user_id 0             null php接受到: Array( [0] => Array ( [count] => 0 [loading_back] =>  ) ) 如果不用count,改成: $sql="select * from tb_rp_logintrace WHERE id=-1";

MySql 里的IFNULL、NULLIF和ISNULL用法区别

mysql中isnull,ifnull,nullif的用法如下: isnull(expr) 的用法:如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0. mysql> select isnull(1+1);-> 0mysql> select isnull(1/0);-> 1使用= 的null 值对比通常是错误的. isnull() 函数同 is null比较操作符具有一些相同的特性.请参见有关is null 的说明. IFNULL(expr1,expr2

order_by_、group_by_、having的用法区别

写于 2012-11-20 22:14  doc文档上. Having 这个是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后就要用到HAVING 的用法了,就是进行判断了,例如说判断聚合函数的值是否大于某一个值等等. select customer_name,sum(balance) from balance group by customer_name having balance>200; yc_rpt_getnew

转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题

SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同. SQL UNION 语法 SELECT column_name(s) FROM tab