php中mysql_num_rows与count(*)的效率对比

使用PHP的朋友都知道,一般情况下,我们要得到某项记录总数,都有两个办法可以得到:一个是使用php自身的mysql_num_rows函数来得到,另外一个是使用Sql自身count来查询获取,下面我们具体看看两个的用法:

1、mysql_num_rows

语法:

  1. mysql_num_rows(data)  
mysql_num_rows(data)

使用实例:

<?php   
  1. $con = mysql_connect("localhost", "root", "123");   
  2. if (!$con)   
  3.   {   
  4.   die(‘Could not connect: ‘ . mysql_error());   
  5.   }   
  6. $db_selected = mysql_select_db("test_db",$con);   
  7. $sql = "SELECT * FROM person";   
  8. $result = mysql_query($sql,$con);   
  9. echo <CODE>mysql_num_rows($result)</CODE>;   
  10. mysql_close($con);   
  11. ?>  
<?php
$con = mysql_connect("localhost", "root", "123");
if (!$con)
  {
  die(‘Could not connect: ‘ . mysql_error());
  }
$db_selected = mysql_select_db("test_db",$con);
$sql = "SELECT * FROM person";
$result = mysql_query($sql,$con);
echo mysql_num_rows($result);
mysql_close($con);
?>

输出结果:3

2、count(*)

语法:

select count(column_name [as countname]) from table_name  
select count(column_name [as countname]) from table_name

3、测试两个的效率

测试数据条数:151255条,表大小300M,先来看看分别用mysql_num_rows和count(*)取出所有数据的时间;

count(*):用时0.071956872940063 s

mysql_num_rows:用时35.272329092026 s

同样可以取得一个表的所有记录数,为什么效率却差如此大呢?

我们利用select count(*) 出来的结果,只有一行,是利用MySQL自身算法进行计算的。

而mysql_num_rows则需要二次运算,先将全部资料查询,然后通过mysql_num_rows计算,是多行计算。
第一种是利用MySQL自身的COUNT()函数,第二种则通过PHP函数进行。如果数据量非常非常大的话,第一种直接利用SQL语句计算的话会快,第二 种相对就会慢了

转载自:http://blog.dc99.com/archives/10