0

有什么区别(性能方面)

$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_* 已被弃用。

4

7 回答 7

3

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

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

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

于 2013-03-20T13:43:34.513 回答
1

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

既然你没有对这些数据做任何事情,你就要求 mysql 白做大量的数据处理。

相反,仅询问 mysqlcount()符合条件的行数不会导致它尝试向您发送所有数据,并且会导致更快的查询,特别是如果该id字段已被索引。

总的来说,如果您的 php 应用程序仍然很简单,但仍然是一种很好的做法,那么这可能被视为一种微优化。

于 2013-03-20T13:45:26.673 回答
1

选择 * 从 tbl_university_master;

返回 2785 行

执行时间:0.071 秒

传输时间:7.032 秒

总时间:8.004 秒


从 tbl_university 中选择计数(*);

1 行返回

执行时间:0.038 秒

传输时间:0秒

总时间:0.039 秒

于 2013-03-20T13:54:09.080 回答
1

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

  • 如您所述,不推荐使用 mysql_*
  • 如果您的表很大,那么您将在 $var 中放入大量数据只是为了计算它。
于 2013-03-20T13:43:27.477 回答
0

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

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

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

于 2013-03-20T13:49:24.310 回答
0

我认为使用

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

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

于 2013-03-20T13:47:21.163 回答
0

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

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

事实上, mysql_* 将被弃用。但同样适用于使用 MySQLi 或 PDO 时。

于 2013-03-20T13:43:30.890 回答