Re: [SQL ] 用Navicat看資料列數,無故變動?

看板Database作者 (TeemingVoid)時間14年前 (2012/02/09 13:52), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ronlee543 (..)》之銘言: : 今天用 Navicat 的時候發現一件怪事。 : 資料列數目在沒有任何動作的情況下,竟然會自己變來變去? : 我的站台還沒開放給公司同事使用,可以確定除了我以外沒有其它人在用。 : 本來以為只有某張表會這樣,後來發現其實還蠻多表都有這個情形。 : 以 civicrm_mailing 這張表為例,正確的列數應該是 465, : 但是它會跳來跳去,永遠都不是 465 。 : 我有擷圖下來,可以參考: : http://ronlee543.blogspot.com/2012/02/mysql-navicat-row-numbers-change.html : 請問為什麼會這樣? 雖然我沒有在用 Navicat,但是依照我的使用經驗,問題不在 Navicat,而是 MySQL 的 Storage engine。 我推測 Navicat 應該是使用 show table status 來抓筆數,否則,每個資料 表都下 select count(*) from ... 恐怕太慢。問題就在於並非所有的儲存引 擎所回報的資料列筆數都是精確值,舉例來說,MyISAM會是精確值,而InnoDB 回報的資料列筆數只是個估計值。 如果你需要真正的資料筆數,應該執行 select count(*) from ...。 一段小實驗: mysql>use SalesDB mysql>show create table orders; mysql>show table status like 'order%' \G mysql>select count(*) from orders; 對於 InnoDB 來說,兩個數目可能不一樣,而後者才是真正的筆數。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.68.213

02/09 18:55, , 1F
原來是這樣。謝謝。
02/09 18:55, 1F
文章代碼(AID): #1FCryDkD (Database)
文章代碼(AID): #1FCryDkD (Database)