Does higher rows count in mysql explain means good or bad?(在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使用表级锁定,仅允许一个会话 一次更新这些表,使它们更适合 只读、主要只读或单用户应用程序。如果您的表经常更新,则会通过INSERT、UPDATE和DELETE(也称为。DML)语句,这会阻止您的SELECT查询。.表更新优先于表检索... 如果一个表有许多更新,则SELECT语句等待到 没有更多更新。
这篇关于在MySQL EXPLAIN中,较高的行数意味着好还是坏?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在MySQL EXPLAIN中,较高的行数意味着好还是坏?


基础教程推荐
- 从字符串 TSQL 中获取数字 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01