有什么区别(性能方面)
$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 白做大量的数据处理。
相反,仅询问 mysqlcount()
符合条件的行数不会导致它尝试向您发送所有数据,并且会导致更快的查询,特别是如果该id
字段已被索引。
总的来说,如果您的 php 应用程序仍然很简单,但仍然是一种很好的做法,那么这可能被视为一种微优化。
选择 * 从 tbl_university_master;
返回 2785 行
执行时间:0.071 秒
传输时间:7.032 秒
总时间:8.004 秒
从 tbl_university 中选择计数(*);
1 行返回
执行时间:0.038 秒
传输时间:0秒
总时间:0.039 秒
我会使用第二个原因有两个:
select * from tbl where id='something'
从具有 ID 条件的表中选择所有数据。
该COUNT()
函数返回与指定条件匹配的行数。
如需更多阅读、练习和演示,请访问 =>>> w3schools
我认为使用
$var = mysql_query("select count(*) from tbl where id='somthing'");
效率更高,因为您没有根据从 MySQL 返回的行数分配内存。
第一个收集所有数据并计算结果集中的行数,这是性能密集型的。后者只是快速计数,速度更快。
但是,如果您需要数据和计数,则执行第一个查询并使用mysql_num_rows
(或 PDO 中的类似内容)比执行另一个查询来进行计数更明智。
事实上, mysql_* 将被弃用。但同样适用于使用 MySQLi 或 PDO 时。