哪一个更快/更聪明,为什么:COUNT(*)或存储数字每个做什么

时间:2010-07-27 05:13:54

标签: php mysql performance

PHP

$total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account WHERE id='$id'"),0)

Mysql帐户表

|user_id|

mysql点表

|id | user_id | points |

PHP

$total_points = mysql_query("SELECT points FROM account WHERE id='$id'");

Mysql帐户表

|user_id| points |

Mysql点表

|id | user_id | points |

3 个答案:

答案 0 :(得分:3)

存储变量可能会更快,但这也意味着不断更新它,从长远来看,这可能效率更低/更慢。

然而,使用COUNT(id)会比COUNT(*)好得多。所以我的投票是使用COUNT(id) :)

答案 1 :(得分:0)

首先,对于您的第一行,我认为使用FOUND_ROWS()比使用COUNT(*)更快。

$total_points = mysql_num_rows(mysql_query("SELECT FOUND_ROWS() FROM account WHERE id='$id'"),0)

一旦点表变大,第二种方法会更快,但您需要确保正确增加帐户表以使这些值保持同步。如果您忘记在某些地方添加积分,或忘记删除它们等,它可能会变得不准确。

答案 2 :(得分:0)

COUNT(*)或查询版本应该更快,因为您不会更进一步到mysql_num_rows。对于计数,您不需要所有字段(*),您只需执行COUNT(fieldID)即可快得多。

需要注意的几点:

请注意,您只使用了一行,因为您使用的是where子句,换句话说,如果找不到,结果将是一行或没有行:

$total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account WHERE id='$id'"),0)

通常情况下,当您期望多个记录时,您应该计算,例如:

$total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account"),0)

同样,对于优化查询,请使用单个字段:

$total_points = mysql_result(mysql_query("SELECT COUNT(fieldID) as Num FROM account"),0)