2010-06-02 27 views
3

我在做什麼:講解和COUNT返回兩個不同的值

explain select * from calibration; 

它說:52133456345632行

當我這樣做:

select count(*) from calibration; 

我收到52134563456961

可以

人解釋這裏發生了什麼?

+0

難道你不在這兩個命令的執行之間插入新的行嗎? – 2010-06-02 21:33:46

+2

只是爲了澄清:計數版本將是準確的,因爲它會真正計數您現有的行。解釋版本不計算您的行數,但可能使用估算/緩存。解釋並不打算在代碼或生產中實際使用 - 它只是幫助分析查詢的工具。 – 2010-06-02 23:34:15

+0

henrik請把它放在答案中,以便我可以將其標記爲正確的 – 2010-06-03 02:02:14

回答

7

表統計信息(由EXPLAIN使用)基於可能不準確的系統緩存值。

http://dev.mysql.com/doc/refman/5.1/en/using-explain.html說:

對於InnoDB表,這個數字是一個估計值,且可能並不總是準確的。

因此,查詢的'count()'版本將是準確的,因爲它會真正'計數'現有的行。 「解釋」版本不一定會計算您的行數,但可能使用估算/緩存。解釋並不打算在代碼或生產中實際使用 - 它只是幫助分析查詢的工具。

+0

如何重置緩存? – 2010-06-02 21:34:35

+1

我不知道,手冊頁不說。但是這個數字是99.8%準確的,你真的需要它是準確的嗎? – 2010-06-02 21:36:06

+1

我在問題中添加了我的評論給你的回答,因爲它不是一個替代方案,而是一個澄清。希望沒關係。 – 2010-06-03 08:43:33

相關問題