(表现明智)
之间有什么区别?$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_ *已被弃用。
答案 0 :(得分:3)
第一个版本返回整个结果集。如果您的表格很宽,这可能是一个大数据量。如果id
上有索引,则仍需要读取原始数据以填写值。
第二个版本仅返回计数。如果id
上有索引,那么它将使用索引而不需要读取数据页中的任何数据。
如果您只想要计数而不是数据,则第二个版本更清晰,应该表现更好。
答案 1 :(得分:1)
我会使用第二个原因:
答案 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