【问题标题】:Faster way to know the total number of rows in MySQL database?更快地了解 MySQL 数据库中的总行数?
【发布时间】:2010-05-26 16:56:20
【问题描述】:

如果我需要知道数据库表中的总行数,我会这样做:

$query = "SELECT * FROM tablename WHERE link='1';";
$result = mysql_query($query);
$count = mysql_num_rows($result);

更新:我弄错了,以上是我的实际方法。向大家道歉

因此,您可以看到扫描整个数据库的数据总数已恢复。

有没有更好的办法?

【问题讨论】:

  • 从技术上讲,count($rows) 调用是在 PHP-land 中计算 $rows 数组中的行数,而不是通过扫描 database-land 中的数据库。
  • 虽然您的方法不是最优的,但它也是错误的。您将获得字段数,而不是行数。乘以 2。
  • 你想要链接='1'吗?如果该表中的所有记录都有link='1',那么您将使用以下示例获得该表中所有记录的计数,但通常情况并非如此。如果您真的想获取所有记录,我会删除链接='1'。
  • 我已经更新了我的问题。请看

标签: php mysql records


【解决方案1】:
$query = "SELECT COUNT(*) FROM tablename WHERE link = '1'";
$result = mysql_query($query);
$count = mysql_result($result, 0);

这意味着您不会在数据库和 PHP 之间传输所有数据,这显然是对时间和资源的巨大浪费。

对于它的价值,您的代码实际上不会计算行数 - 它会给您 2 倍的列数,因为您正在计算表示单行的数组中的项目数(以及 mysql_fetch_array每列在数组中为您提供两个条目 - 一个数字和一个列名)

【讨论】:

  • @Starx 答案还是一样的:)
【解决方案2】:
SELECT COUNT(*) FROM tablename WHERE link='1';

【讨论】:

  • @Pedro - 它可能不会有太大的不同。
  • @Pedro 等人,您应该使用列名。这不计算该列中的 NULL 值。有些人建议使用 count(1),因为它更快,但除了最脑残的 DBMS 之外,这在所有方面都是垃圾。
  • @Pedro: (*) 会导致性能稍快,因为 MySQL 会自动使用索引来获取结果。
【解决方案3】:

你可以这样做:

SELECT count(*) FROM tablename;

为您的查询。结果将是包含行数的单列。

【讨论】:

    【解决方案4】:

    如果我需要知道数据库表中的总行数

    也许我在这里遗漏了一些东西,但是如果您只想获取表中的总行数,则不需要 WHERE 条件。只需这样做:

    SELECT COUNT(*) FROM tablename
    

    使用 WHERE 条件,您将只计算满足此条件的行数。

    【讨论】:

      【解决方案5】:

      使用下面的代码

      $qry=SHOW TABLES FROM 'database_name';
      $res=mysql_query($qry);
      $output=array();
      $i=0;
      while($row=mysql_fetch_array($res,MYSQL_NUM)){
             ++$i;
             $sql=SELECT COUNT(*) FROM $row[0];
             $output[$i]=mysql_query($sql);
       }
      $totalRows=array_sum($ouptput);
      echo $totalRows;
      

      【讨论】:

      • 为什么投反对票???请至少写一些理由..以便我可以更新我的知识
      【解决方案6】:

      【讨论】:

      • -1 坏主意。这要求您执行完整的查询。 SELECT count(*) 效率更高。
      • @Kenaniah:不一定是个坏主意。如果 OP 正在寻找的只是行数,那么是的,这是一个坏主意。但是,如果 OP 在其他操作中需要数据,那么mysql_num_rows() 可能更适合。
      • @Joseph,同意其他情况。但在 this 问题的上下文中,这是个坏主意。
      【解决方案7】:

      如果你要使用下面的 SQL 语句:

      SELECT COUNT(*) FROM tablename WHERE link='1';
      

      确保您在“链接”列上有索引

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多