我在做什麼:講解和COUNT返回兩個不同的值
explain select * from calibration;
它說:52133456345632行
當我這樣做:
select count(*) from calibration;
我收到52134563456961
可以人解釋這裏發生了什麼?
我在做什麼:講解和COUNT返回兩個不同的值
explain select * from calibration;
它說:52133456345632行
當我這樣做:
select count(*) from calibration;
我收到52134563456961
可以人解釋這裏發生了什麼?
表統計信息(由EXPLAIN使用)基於可能不準確的系統緩存值。
http://dev.mysql.com/doc/refman/5.1/en/using-explain.html說:
對於InnoDB表,這個數字是一個估計值,且可能並不總是準確的。
因此,查詢的'count()'版本將是準確的,因爲它會真正'計數'現有的行。 「解釋」版本不一定會計算您的行數,但可能使用估算/緩存。解釋並不打算在代碼或生產中實際使用 - 它只是幫助分析查詢的工具。
如何重置緩存? – 2010-06-02 21:34:35
我不知道,手冊頁不說。但是這個數字是99.8%準確的,你真的需要它是準確的嗎? – 2010-06-02 21:36:06
我在問題中添加了我的評論給你的回答,因爲它不是一個替代方案,而是一個澄清。希望沒關係。 – 2010-06-03 08:43:33
難道你不在這兩個命令的執行之間插入新的行嗎? – 2010-06-02 21:33:46
只是爲了澄清:計數版本將是準確的,因爲它會真正計數您現有的行。解釋版本不計算您的行數,但可能使用估算/緩存。解釋並不打算在代碼或生產中實際使用 - 它只是幫助分析查詢的工具。 – 2010-06-02 23:34:15
henrik請把它放在答案中,以便我可以將其標記爲正確的 – 2010-06-03 02:02:14