从PHP中的mysql表中获取总记录的最快方法

时间:2009-08-15 14:44:17

标签: php mysql

下面是我用来获取数据库中照片总数的当前代码,估计的数字甚至可以接受,因为结果数量仅用于确定我要上传到文件夹余额的文件夹编号文件。

我觉得有一种更好的方式,然后我在下面使用?

$sql = 'SELECT auto_id FROM friend_user_photo';
$query = executeQuery($sql);
$rowcount = mysql_num_rows($query);

$ rowcount返回friend_user_photo表中的记录数

更新:

是否有办法阅读有关数据库的信息。那可能比使用上面的方法或COUNT更快?

2 个答案:

答案 0 :(得分:5)

您也可以使用COUNT。

$sql = 'SELECT COUNT(*) FROM friend_user_photo';
$query = executeQuery($sql);

这将返回包含结果数量的单行。这也是一个常规的聚合函数,所以你可以做连接,子查询,条件(WHERE),分组和所有好东西。

您也可以将其视为另一个字段,因此您可以对其进行别名,然后在您的连接和子查询中使用它。您还可以选择其他数据,例如:

$sql = 'SELECT COUNT(*), name FROM table GROUP BY name

这将返回一个不同的名称列表,但也会包含每个名称的记录数。

编辑替代count()

如果您不想使用COUNT(*),您还可以使用'show table status'。例如:

$sql = "SHOW TABLE STATUS LIKE 'friend_user_photo'";
// Note, this LIKE is a regular LIKE, so wild cards can be used

这将返回包含各种元数据(包括行)的行,但也包括密钥长度(以字节为单位)和数据长度(以字节为单位)以及许多其他数据。这通常也非常快,因为它只是将元数据拉为运行像COUNT(*)这样的聚合函数(只要该表未被当前正在运行的另一个查询锁定)。

答案 1 :(得分:4)

SELECT COUNT(auto_id)FROM friend_user_photo

会更直接,你不必使用mysql_num_rows($ query)。您只需检查$ query返回的值。

编辑:因为你更新了你想要的另一个想法而不是COUNT。

如果auto_id只是一个整数或长整数等...从1开始并递增1那么LIMIT如何:

SELECT auto_id FROM friend_user_photo LIMIT 0,1

我不确定它是否更快......

编辑#2:

根据这些帖子:

如果你使用的是myisam,那么COUNT是最快的:

http://lists.mysql.com/mysql/184095 -

  表中的

select count(*)是myisam最快的,因为它会缓存   行数。这还将包括任何具有空值的行。

Whats the best way to get total # of records in a mysql table with php?