0

こんにちは私の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)

2つのクエリの行数の数の違いを観察します

そして、テーブルを変更せずに、同じクエリを再度実行しました 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)

上記のクエリの[行]列を確認してください。202416121934のような結果が得られました。

なぜこれが起こっているのですか?

4

2 に答える 2

1

MySQLDocsから

行数。MyISAMなどの一部のストレージエンジンは、正確な数を保存します。InnoDBなどの他のストレージエンジンの場合、この値は概算値であり、実際の値から40〜50%も異なる場合があります。このような場合は、SELECT COUNT(*)を使用して正確なカウントを取得してください。

したがって、これはInnoDBデータベースの通常の動作です。

于 2012-10-19T13:47:23.607 に答える
1
select count(*)...

現在の実際の行数を示します

select count(1)...

最初の列がnullでない行数を示します

その他はデータベースディクショナリベースのメトリックであり、リアルタイムでは更新されませんが、統計などに依存します。

情報については、こちらをご覧くださいCOUNT

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

したがって、正確な行数(重複およびすべて)が必要な場合は分離レベルに応じて、オープントランザクションはおそらく除外されます)、を使用しますCOUNT(*)

于 2012-10-19T13:48:15.480 に答える