2013-03-20 85 views
0

是什么(性能明智)使用count而不是mysql_num_rows?

$var = mysql_query("select * from tbl where id='something'"); 

$count = mysql_num_rows($var); 

if($count > 1){ 

    do something 

} 

$var = mysql_query("select count(*) from tbl where id='somthing'"); 

P.S的区别是:我知道mysql_ *已被弃用。

+2

你为什么不运行一些测试,看看? – j08691 2013-03-20 13:41:29

+2

如果你只是想'count'去第二个。第一个为你提供'数据'和'计数'。 – Rikesh 2013-03-20 13:41:39

+0

从PHP 5.5.0开始不推荐使用mysql_扩展。改用PDO。 但是要回答你确切的问题,我想最好的方法是做一些测试。 – cen 2013-03-20 13:44:14

回答

1

select *是要求MySQL来从该表(给定的条件),它获取的所有数据,并给你,这是不是一个非常优化的操作,将导致大量的数据被组织,并通过套接字PHP发送。

既然你对这些数据什么也不做,你已经要求mysql做了大量的数据处理。

相反,只要询问mysql到count()适合条件的行数不会导致它试图向您发送所有数据,并且会导致更快的查询,尤其是如果id字段已建立索引。总的来说,如果你的php应用程序仍然很简单,但仍然是很好的做法,这可能被认为是一种微型优化。

1

我会用第二个有2个原因:

  • 正如你所说,mysql_ *已被弃用
  • 如果你的表是巨大的,你只有$ VAR将数据的相当大的量来计算它。
0

第一个收集所有数据并计算结果集中的行数,这是性能密集型的。后者只是快速计数,速度更快。

但是,如果您同时需要数据和计数,则执行第一个查询并使用mysql_num_rows(或PDO中的类似内容)比执行另一个查询来执行计数更明智。

事实上,mysql_ *将被弃用。但是在使用MySQLi或PDO时也是如此。

3

第一个版本返回整个结果集。如果你的表很宽,这可能是一个很大的数据量。如果在id上有索引,它仍然需要读取原始数据以填写值。

第二个版本只返回计数。如果在id上有索引,那么它将使用该索引并且不需要从数据页面读取任何数据。

如果你只想计数而不是数据,第二个版本更清晰,应该表现更好。

0

我想用

$var = mysql_query("select count(*) from tbl where id='somthing'"); 

更为有效,因为您根据被从MySQL返回的行数不分配内存。

0

select * from tbl where id='something'从ID条件表中选择所有数据。

COUNT()函数返回符合指定条件的行数。

更多的阅读和实践和示范,请访问= >>>w3schools

1

SELECT * FROM tbl_university_master;

2785行(S)返回

执行时间:0.071秒

转换时间:7.032秒

总时间:8.004秒


SELECT COUNT(*)FROM tbl_university;

1行(S)返回

执行时间:0.038秒

转换时间:0秒

总时间:0.039秒