使用count而不是mysql_num_rows?

时间:2013-03-20 13:40:17

标签: php mysql sql

(表现明智)

之间有什么区别?
$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_ *已被弃用。

7 个答案:

答案 0 :(得分:3)

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

第二个版本仅返回计数。如果id上有索引,那么它将使用索引而不需要读取数据页中的任何数据。

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

答案 1 :(得分:1)

我会使用第二个原因:

  • 如您所述,不推荐使用mysql_ *
  • 如果你的桌子很大,你只需要在$ var中输入大量的数据来计算它。

答案 2 :(得分:1)

select *要求mysql从该表中获取所有数据(给定条件)并将其提供给您,这不是一个非常优化的操作,并且会导致大量数据被组织并通过socket到PHP。

由于您对此数据不做任何操作,因此您已经要求mysql无需进行大量数据处理。

相反,只是要求mysql count()符合条件的行数不会导致它尝试向您发送所有数据,并且会导致更快的查询,尤其是{{1} } field已编入索引。

总的来说,如果你的php应用程序仍然很简单,虽然仍然是一个很好的实践,这可能被视为微优化。

答案 3 :(得分:1)

SELECT * FROM tbl_university_master;

返回2785行

执行时间:0.071秒

转移时间:7.032秒

总时间:8.004秒


SELECT COUNT(*)FROM tbl_university;

返回1行

执行时间:0.038秒

转移时间:0秒

总时间:0.039秒

答案 4 :(得分:0)

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

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

事实上,不推荐使用mysql_ *。但是在使用MySQLi或PDO时同样适用。

答案 5 :(得分:0)

我认为使用

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

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

答案 6 :(得分:0)

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

COUNT()函数返回与指定条件匹配的行数。

如需更多阅读,练习和演示,请访问 =>>> w3schools