繁体   English   中英

使用计数而不是mysql_num_rows?

[英]using count instead of 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'");

PS:我知道mysql_ *已过时。

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

第二个版本仅返回计数。 如果id上有一个索引,则它将使用该索引,而无需从数据页中读取任何数据。

如果只需要计数而不是数据,则第二个版本会更清晰,并且应该会更好。

我将使用第二个有两个原因:

  • 如您所说,不建议使用mysql_ *
  • 如果您的表很大,则将大量数据放入$ var中只是为了对其进行计数。

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

由于您随后对该数据不执行任何操作,因此您已要求mysql对所有数据进行任何处理。

相反,仅要求mysql对满足条件的行数进行count()不会导致它尝试向您发送所有数据,并且将导致查询速度更快,尤其是在对id字段进行索引的情况下。

总的来说,如果您的php应用程序仍然很简单,并且仍然是很好的实践,那么这可能被认为是微优化。

选择* FROM tbl_university_master;

返回2785行

执行时间:0.071秒

传输时间:7.032秒

总时间:8.004秒


从tbl_university选择COUNT(*);

已返回1行

执行时间:0.038秒

传输时间:0秒

总时间:0.039秒

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

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

实际上,不建议使用mysql_ *。 但是使用MySQLi或PDO时也是如此。

我认为使用

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

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

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

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

有关更多阅读,练习和演示的信息,请访问= >>> w3schools

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM