本文介紹了在MySQL EXPLAIN中,較高的行數意味著好還是壞?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個舊的MyISAM表,當我提交一些計數查詢時,表被鎖定。如果我在相同的InnoDB表上執行相同的查詢,則查詢執行得更快。問題是,舊的MyISAM表仍然在生產中使用,并且負載很重,而新的表則不是。
現在我們來討論我的問題和問題。當我解釋在兩個表中執行的查詢時,我得到了一些令我困惑的結果。
下面是我在兩個表中執行的查詢:
SELECT COUNT(*)
FROM table
WHERE vrsta_dokumenta = 3
AND dostupnost = 0
以下是舊MyISAM表中的解釋:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE old_table ref idx_vrsta_dokumenta idx_vrsta_dokumenta 1 const 564253 Using where
以下是新InnoDB表的解釋:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE new_table ref idx_vrsta_dokumenta idx_vrsta_dokumenta 1 const 611905 Using where
如您所見,新表中的行數高于舊表中的行數。
那么,在數字越高越不好的情況下,這是否意味著一旦新表完全使用,對它的查詢就會變慢?
如果數字越大越好,那么這可能就是為什么新表速度更快,并且MyISAM在執行一段時間后被鎖定的原因。
不管怎樣,什么是正確的?此行計數是什么意思?
編輯:舊表的列數是新表的兩倍。因為舊IS已拆分為2個表。
推薦答案
黑房男孩:
那么,在數字越高越不好的情況下,這是否意味著一旦新表完全使用,對它的查詢就會變慢?
MySQL manual表示解釋中的行列:
行列指示MySQL認為它必須的行數
檢查以執行查詢。對于InnoDB表,此數字是估計值,可能并不總是
完全正確。
所以,數字越高越好,這只是基于表元數據的猜測。
黑房男孩:
如果數字越高越好,那么這可能就是為什么
新表更快,并且MyISAM在一段時間后被鎖定
執行。
數字越高越不好。MyISAM Get鎖定不是因為此號碼。
Manual:
MySQL對MyISAM使用表級鎖定,僅允許一個會話
一次更新這些表,使它們更適合
只讀、主要只讀或單用戶應用程序。.表更新優先于表檢索…
如果一個表有許多更新,則SELECT語句等待到
沒有更多更新。
如果您的表經常更新,則會通過INSERT、UPDATE和DELETE(也稱為。DML)語句,這會阻止您的SELECT查詢。
這篇關于在MySQL EXPLAIN中,較高的行數意味著好還是壞?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,