什么是使用php获取mysql表中记录总数的最佳方法?

时间:2008-09-22 19:06:16

标签: php mysql

从大表中选择记录总数的最有效方法是什么?目前,我只是在做

$result = mysql_query("SELECT id FROM table");
$total = mysql_num_rows($result)

如果表中有很多记录,我被告知这不是非常有效或快速。

10 个答案:

答案 0 :(得分:28)

你被正确地告知了。 mysql可以为你做到更有效率。

$result = mysql_query( "select count(id) as num_rows from table" );
$row = mysql_fetch_object( $result );
$total = $row->num_rows;

答案 1 :(得分:4)

您应该使用SQL's built in COUNT function

$result = mysql_query("SELECT COUNT(id) FROM table");

答案 2 :(得分:3)

MyISAM表已存储行数

SELECT COUNT(*) FROM table
MyISAM表上的

只是读取该值。它不扫描表或索引。因此,它与从不同的表中读取值一样快或更快。

答案 3 :(得分:2)

根据MySQL documentation,如果您使用MyISAM表(这是最常用的表格类型),这是最有效的:

$result = mysql_query("SELECT COUNT(*) FROM table");

否则你应该像Wayne所说的那样做,并确保计算的列被编入索引。

答案 4 :(得分:1)

我可以补充一点,获取记录总数的最“有效”方式,特别是在大表中,是将总量保存为另一个表中的数字。 这样,您不必在每次想要获得总数时查询整个表格。

但是,您必须在数据库中设置一些代码或触发器,以便在添加/删除行时增加或减少该数字。

所以它不是最简单的方法,但如果你的网站增长,你肯定应该考虑这样做。

答案 5 :(得分:1)

即使我同意使用内置函数,我也没有看到mysql_num_rows和count(id)之间的任何性能差异。对于25000个结果,相同的性能(可以说确切。)仅供记录。

答案 6 :(得分:0)

这样的事情:

$result = mysql_query("SELECT COUNT(id) AS total_things from table");
$row = mysql_fetch_array($result,MYSQL_ASSOC);
$num_results = $row["total_things"];

答案 7 :(得分:0)

只是想注意SHOW TABLE STATUS会返回Rows列,但我无法说出它的效率。一些轻量级的谷歌搜索引发了两年前MySQL 4缓慢的报道。可能会进行有趣的时间试验。

另请注意InnoDB caveat关于不准确的计数。

答案 8 :(得分:0)

使用聚合函数。尝试以下SQL命令

$num= mysql_query("SELECT COUNT(id) FROM $table");

答案 9 :(得分:0)

不推荐使用mysqli_query()。更好地利用这个:

$result = $dbh->query("SELECT id FROM {table_name}");
$total = $result->num_rows;

使用PDO:

$result = $dbh->query("SELECT id FROM {table_name}");
$total = $result->rowCount();

(其中' $ dbh' =连接数据库的句柄)