用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关于不准确计数的警告。