为什么行数不同?

时间:2012-10-19 13:43:24

标签: mysql

嗨,我不明白为什么我的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)

观察上面查询的Rows列我得到的结果如2024 1612 1934

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

来自MySQL Docs

  

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

因此,这是InnoDB数据库的正常行为

答案 1 :(得分:1)

select count(*)...

现在为您提供实际的行数

select count(1)...

给出第一列不为空的行数

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

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

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

因此,如果您想要确切的行数 - 重复项和所有 - 现在(打开的交易可能除外,具体取决于isaolation级别),使用COUNT(*)。< /强>