2012-06-18 119 views
0

我有一個表的行計數爲48769914。問題是查詢數據庫時的虛假信息,即data_length。任何想法如何糾正這種不端行爲?MySQL顯示狀態

mysql> show table status like "events"\G 
*************************** 1. row *************************** 
      Name: events 
     Engine: InnoDB 
     Version: 10 
    Row_format: Compact 
      Rows: 0 
Avg_row_length: 0 
    Data_length: 16384 
Max_data_length: 0 
    Index_length: 32768 
     Data_free: 7405043712 
Auto_increment: 59816602 
    Create_time: 2012-06-05 05:12:37 
    Update_time: NULL 
    Check_time: NULL 
     Collation: utf8_general_ci 
     Checksum: NULL 
Create_options: 
     Comment: 
1 row in set (0.88 sec) 

精確計數:

mysql> select count(id) from events; 
+-----------+ 
| count(id) | 
+-----------+ 
| 48769914 | 
+-----------+ 
1 row in set (5 min 37.67 sec) 

更新狀態信息看起來像表是空的。零行,零行長度和表中基本沒有數據。我怎樣才能讓MySQL顯示正確的數據估計。

+0

正是u需要什麼看InnoDB restrictions手冊中? –

+0

我想知道爲什麼'show status'返回無用的信息,或者說如何獲得有用的數據 – cpower

回答

0

InnoDB不會在表狀態中存儲行計數,因此不是僞造的。你可以通過在你想要行數的地方運行你的SELECT查詢來解決這個問題。

2

InnoDB的行數並不準確,因爲InnoDB並沒有記錄內部記錄的數量,它只能通過表空間中分配的空間量來估計它。

瞭解更多信息

+0

這就是問題所在。對於48769914,零不是一個很好的近似值,爲表格預留了其他數據,例如data_length。 – cpower