您的位置:首页 > 数据库 > MySQL

mysql_num_rows($result)和select count()的区别

2010-11-01 21:29 876 查看
mysql_num_rows($result)和

$sql = "select count(id) from `content`";
//$rs= mysql_query($sql);
$rs= mysql_fetch_array(mysql_query($sql));
$total=$rs[0];

有啥区别?比如含义上,性能上啥的?

利用select count(*) ,出来的结果,只有一行,是利用MySQL自身算法进行计算的。
mysql_num_rows则需要二次算:先将全部资料查询,然后通过mysql_num_rows计算,是多行计算。
第一种是利用MySQL自身的COUNT()函数,第二种则通过PHP函数进行。
如果数据量非常非常大的话,第一种直接利用SQL语句计算的话会快一些,第二种相对会慢一些。
不过小数量级的数据表其实差异估计也看不出太大变化来,呵呵。



一般获取个数都是做分页用的,所以不光要查出个数,还要数据的内容
个人感觉要看数据量多少了,如果数据量多用SELECT COUNT(),这样还要进行SELECT *查询
如果数据量少,用mysql_num_rows(),这样少了一次查询等于,直接SELECT *完了后就mysql_num_rows()行了


经过测试,30万条数据的查询速度差异明显.

使用select count(0)快很多

不知道count(*)和count(id)哪个快些
有什么区别?

COUNT(id) 是比较快的。×需要MYSQL检索全部字段,不过我记得MYISAM表中MYSQL把 × 直接是当作主键索引来处理的。(如果你的MYSQL缓存比较大,读取就没什么差别了。600W数量以下没什么差别,个人经验。我的测试千万级别以上就不行了。(表未分区,性能受影响。))

SELECT COUNT(*) 在有查询条件下快过 SELECT COUNT(Id)
——————————————————————————————————————————————————————————————————
在MyISAM存储引擎上没有任何差距,至少在我的机器上2500万行的数据上没有速度上的区别,
select count(id),在id为主键的情况下,取决于你所用的存储引擎,MyISAM引擎已经存储了相关的行数信息,所以当你使用这条语句查询行数的时候立马就会出来数据,不需要mysql来计算,而InnoDb引擎就不动了,你灌入2500万的数据试试,两种引擎马上就会出现差距,而且差距巨大,
在用一存储引擎并且没有WHERE条件的情况下,没啥差距,如果有了WHERE条件,那样select count(id)要比count(*)快一点点,而且还不明显,
试问,在实际应用上有几个表的数据会上千万的级别了?早就做分表分库处理了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: