[英]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
上有一个索引,则它将使用该索引,而无需从数据页中读取任何数据。
如果只需要计数而不是数据,则第二个版本会更清晰,并且应该会更好。
我将使用第二个有两个原因:
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.