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

时间:2020-03-06 14:33:28  来源:igfitidea点击:

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

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

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

解决方案

我们应该使用SQL的内置COUNT函数:

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

正确地告诉我们。 mysql可以为我们完成这项工作,效率更高。

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

像这样的事情呢:

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

根据MySQL文档,如果我们使用MyISAM表(这是最常用的表类型),则这是最有效的:

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

否则,我们应该按照Wayne所述进行操作,并确保对被计数的列进行索引。

我可以补充一下,获取记录总数(最重要的是在一张大表中)的最"有效"方法是将总数另存为另一个表中的数字。
这样,我们不必每次要获取总数时都查询整个表。

但是,我们将不得不在数据库中设置一些代码或者触发器,以在添加/删除行时增加或者减少该数字。

因此,这不是最简单的方法,但是如果网站发展壮大,那么我们绝对应该考虑这样做。

MyISAM表已经存储了行数

SELECT COUNT(*) FROM table

在MyISAM表上只是读取该值。它不扫描表或者索引。因此,它与从其他表中读取值一样快或者更快。

只是想注意一下," SHOW TABLE STATUS"会返回" Rows"列,尽管我不能说出它的效率。一些轻巧的Google搜索发现两年前有关MySQL 4速度缓慢的报道。可能会带来有趣的时间考验。

还要注意InnoDB关于不准确计数的警告。