【问题标题】:MySQL Explain : how to calculate total examined rows?MySQL 说明:如何计算检查的总行数?
【发布时间】:2017-11-01 04:44:47
【问题描述】:

我在下面有一个解释结果,问题是如何计算检查的总行数?请详细说明~(先提问~如有错误请指正,不胜感激)

id  select_type type    possible_keys   key_len rows  
1   PRIMARY     ALL                             1423656  
1   PRIMARY     eq_ref  PRIMARY         8       1  
1   PRIMARY     ref                     152     1  
1   PRIMARY     ALL                             138   
1   PRIMARY     ALL                             1388  
1   PRIMARY     ALL                             1564  
3   DERIVED     ALL                             1684  
3   DERIVED     eq_ref  PRIMARY         8       1  
2   DERIVED     ALL                             141

【问题讨论】:

  • 大约 140 万。确切的数字似乎并不重要。你真正想知道什么?
  • “rows”列是 MySQL 在获得正确结果集之前必须检查的行数的近似值。这是一个估计。正如@juergend 所说,您实际上想从中了解什么?
  • 您需要将 ALL 的类型相乘,因为涉及到 JOIN(S),并将 eq_ref、ref 类型添加到该计数中以正确计算
  • @juergend 我只想估计要扫描多少行。我认为这是一种简单的判断 SQL 性能的方法,虽然它可能不准确。
  • 这和 select_type 没有关系吗? @RaymondNijland

标签: mysql


【解决方案1】:

来自手册:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html

行(JSON 名称:行)

rows 列表示 MySQL 认为它必须的行数 检查以执行查询。

对于 InnoDB 表,这个数字是一个估计值,可能并不总是 准确的。

您的一张表有 140 万个非常高的数字,但 possible_keys 列是空的。这意味着这是一个迫切需要索引的表。

要检查的大量行就是这个意思。 Mysql 需要读取所有这些行才能给出结果。

如果您发布了您的表格和查询,我们可以帮助您弄清楚这些索引应该是什么。

【讨论】:

  • 很高兴能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多