【问题标题】:Why the difference in the rows count?为什么行数的差异?
【发布时间】:2012-10-19 13:43:24
【问题描述】:

您好,我不明白为什么我的 MYSQL 行为异常。

在这里我想知道表中存在的记录数 site_details 为了得到这个我已经执行 select count(*) from site_details; 我得到的结果是

+----------+
| count(*) |
+----------+
|     2024 |
+----------+

然后再次验证我已执行 mysql> SHOW TABLE STATUS FROM msp LIKE 'site_details'\G 我得到了类似的结果

 *************************** 1. row ***************************
           Name: site_details
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 1612
 Avg_row_length: 71
    Data_length: 114688
Max_data_length: 0
   Index_length: 81920
      Data_free: 7340032
 Auto_increment: NULL
    Create_time: 2012-10-01 08:05:09
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

观察两个查询的行数之间的计数差异

然后在不修改我的表的情况下,我再次执行了相同的查询 mysql> SHOW TABLE STATUS FROM msp LIKE 'site_details'\G 奇怪的是我得到了像

这样的结果
 *************************** 1. row ***************************
           Name: site_details
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 1934
 Avg_row_length: 59
    Data_length: 114688
Max_data_length: 0
   Index_length: 81920
      Data_free: 7340032
 Auto_increment: NULL
    Create_time: 2012-10-01 08:05:09
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

观察上述查询的行列,我得到了类似 2024 1612 1934 的结果

为什么会这样??

【问题讨论】:

    标签: mysql


    【解决方案1】:
    select count(*)...
    

    现在给你实际的行数

    select count(1)...
    

    给出第一列不为空的行数

    其他是基于数据库字典的指标,它们不会实时更新,而是依赖于统计数据等。

    有关COUNT的信息,请参见此处:

    http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

    因此,如果您想要确切的行数 - 重复行数和所有行数 - 现在(打开事务可能除外,具体取决于隔离级别),使用COUNT(*)

    【讨论】:

      【解决方案2】:

      来自MySQL Docs

      行数。一些存储引擎,例如 MyISAM,存储 准确计数。对于其他存储引擎,例如 InnoDB,此值为 一个近似值,可能与实际值相差多达 40 到 50%。在这种情况下,请使用 SELECT COUNT(*) 获得准确的 数。

      所以,这是 InnoDB 数据库的正常行为

      【讨论】:

        猜你喜欢
        • 2019-11-17
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-10
        • 2021-02-05
        • 2015-06-04
        相关资源
        最近更新 更多