本文介紹了在MySQL EXPLAIN中,較高的行數(shù)意味著好還是壞?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問題描述
我有一個(gè)舊的MyISAM表,當(dāng)我提交一些計(jì)數(shù)查詢時(shí),表被鎖定。如果我在相同的InnoDB表上執(zhí)行相同的查詢,則查詢執(zhí)行得更快。問題是,舊的MyISAM表仍然在生產(chǎn)中使用,并且負(fù)載很重,而新的表則不是。
現(xiàn)在我們來(lái)討論我的問題和問題。當(dāng)我解釋在兩個(gè)表中執(zhí)行的查詢時(shí),我得到了一些令我困惑的結(jié)果。
下面是我在兩個(gè)表中執(zhí)行的查詢:
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
如您所見,新表中的行數(shù)高于舊表中的行數(shù)。
那么,在數(shù)字越高越不好的情況下,這是否意味著一旦新表完全使用,對(duì)它的查詢就會(huì)變慢?
如果數(shù)字越大越好,那么這可能就是為什么新表速度更快,并且MyISAM在執(zhí)行一段時(shí)間后被鎖定的原因。
不管怎樣,什么是正確的?此行計(jì)數(shù)是什么意思?
編輯:舊表的列數(shù)是新表的兩倍。因?yàn)榕fIS已拆分為2個(gè)表。
推薦答案
黑房男孩:
那么,在數(shù)字越高越不好的情況下,這是否意味著一旦新表完全使用,對(duì)它的查詢就會(huì)變慢?
MySQL manual表示解釋中的行列:
行列指示MySQL認(rèn)為它必須的行數(shù)
檢查以執(zhí)行查詢。對(duì)于InnoDB表,此數(shù)字是估計(jì)值,可能并不總是
完全正確。
所以,數(shù)字越高越好,這只是基于表元數(shù)據(jù)的猜測(cè)。
黑房男孩:
如果數(shù)字越高越好,那么這可能就是為什么
新表更快,并且MyISAM在一段時(shí)間后被鎖定
執(zhí)行。
數(shù)字越高越不好。MyISAM Get鎖定不是因?yàn)榇颂?hào)碼。
Manual:
MySQL對(duì)MyISAM使用表級(jí)鎖定,僅允許一個(gè)會(huì)話
一次更新這些表,使它們更適合
只讀、主要只讀或單用戶應(yīng)用程序。.表更新優(yōu)先于表檢索…
如果一個(gè)表有許多更新,則SELECT語(yǔ)句等待到
沒有更多更新。
如果您的表經(jīng)常更新,則會(huì)通過(guò)INSERT、UPDATE和DELETE(也稱為。DML)語(yǔ)句,這會(huì)阻止您的SELECT查詢。
這篇關(guān)于在MySQL EXPLAIN中,較高的行數(shù)意味著好還是壞?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,