从大表中选择记录总数的最有效方法是什么?目前,我只是在做
$result = mysql_query("SELECT id FROM table");
$total = mysql_num_rows($result)
如果表中有很多记录,我被告知这不是非常有效或快速。
答案 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' =连接数据库的句柄)