2009-08-15 47 views
1

以下是我用来获取数据库中照片总数的当前代码,估计数甚至可以接受,因为结果数仅用于确定哪个文件夹号码我想上传到文件夹的文件夹余额。以最快的方式从PHP中的mysql表中获取总记录

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

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

$ ROWCOUNT返回在friend_user_photo表记录的数量

UPDATE:

是不是有什么办法可以阅读有关数据库的信息。那么使用上面的方法或COUNT可能会更快?

+0

从'mys2ql'改变为'mysql',假设为typo =) – 2009-08-15 14:56:52

回答

5

您还可以使用COUNT。

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

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

您也可以将它视为另一个字段,以便您可以将它别名,然后在连接和子查询中使用它。您还可以选择额外的数据,例如:

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

这将返回名称的不同列表,但也将包含的存在为每个名字的记录数。

编辑替代计数()

如果你不想使用COUNT(*),您也可以使用“节目表状态”。例如:

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

这将返回一排各种元数据,包括行,而且还包括密钥长度(以字节为单位)和数据长度(以字节为单位),以及大量的其他数据。这通常也是相当快的,因为它只是将元数据拉到合适的位置来运行COUNT(*)等集合函数(只要表未被当前正在运行的另一个查询锁定)。

+0

谢谢,我只需要记录的总数nu8mber,没有任何条件在哪里,总数甚至不是必须是准确的,它可以是一个估计,我想可能有一种方法来读取表格信息,并快速得到行估计也许然后做一个选择查询 – JasonDavis 2009-08-15 14:55:39

+0

谢谢,所以“显示表状态”应该是比其他任何事情都快吗? – JasonDavis 2009-08-15 16:46:34

+1

它应该证明比其他任何事情都快,因为它只是拉动表的元数据来运行像SELECT这样的逻辑查询。如果表已被查询锁定,那么它当然会慢。 – 2009-08-15 16:56:24

4

SELECT COUNT(auto_id)FROM friend_user_photo

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

编辑:由于你更新了你想要的其他想法,而不是COUNT。

如果auto_id仅仅是一个整数或长,等等...这开始于1和递增1,然后怎么样LIMIT:

SELECT auto_id FROM friend_user_photo LIMIT 0,1 

我不知道,如果它的速度更快,但...

编辑#2:

根据这些帖子:

如果你正在使用MyISAM的再算上是最快的:

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

选择从表COUNT(*)是最快对于MyISAM因为它缓存 行计数。这也将包含任何具有空值的行。

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

+0

值得注意的是,根据所使用的引擎,COUNT()可能会慢很多:http:// www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ – 2009-08-15 14:53:21

+0

感谢您的信息 – JasonDavis 2009-08-15 16:47:04