mysql中的表是什么意思_sql-MySQL说明计划中“选择已优化的表”的含义

sql-MySQL说明计划中“选择已优化的表”的含义

MySQL Explain plan中的explain plan是什么意思?

explain select count(comment_count) from wp_posts;

+----+-------------+---------------------------+-----------------------------+

| id | select_type | table,type,possible_keys, | Extra |

| | | key,key_len,ref,rows | |

+----+-------------+---------------------------+-----------------------------+

| 1 | SIMPLE | all NULLs | Select tables optimized away|

+----+-------------+---------------------------+-----------------------------+

1 row in set (0.00 sec)

注意:编辑了explain plan输出以提高可读性。

6个解决方案

41 votes

从MySQL文档中:

该查询仅包含聚合函数(MIN(),MAX()) 全部使用索引解决,或者对MyISAM使用COUNT(*)进行解析,并且没有GROUP BY 条款。 优化程序确定只应返回一行。

基本上,这意味着您的查询使用的数据直接可用于MySQL,并且查询将在恒定时间内运行。

Leolo answered 2020-07-26T18:06:28Z

27 votes

这意味着您执行的查询只不过计算表中的行数而已,该表是MyISAM表。 MyISAM表存储有单独的行计数,因此,执行此查询MySQL根本不需要查看任何表行数据。 而是立即返回预先计算的行数。 因此,对表的访问被“优化了”,查询很快。

在MySQL中的其他存储引擎(例如InnoDB)上不会发生相同的情况。 但实际上,由于各种其他原因,您在大多数情况下都希望使用InnoDB而不是MyISAM。 (即使没有行数优化,这种查询也非常非常快。)

select count(comment_count) from wp_posts;

那真的是你的本意吗? 那和SELECT COUNT(*)...一样(假设comment_count不能是NULL,那不可能或者您不会获得最优化)。 如果您总共需要comment_count个,则应该使用SUM(comment_count),而不会获得“最优化”行为。

bobince answered 2020-07-26T18:05:58Z

8 votes

这意味着该表已在查询之外进行了完全优化。 没有比这更好的了。

OMG Ponies answered 2020-07-26T18:06:48Z

5 votes

公认的答案和最受支持的答案似乎表明,这种类型的解释仅适用于MyISAM表。 但是我在InnoDB表中看到了这一点。

我在这里查看了mysql文档以获取版本5.6,[https://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain_extra]

我看不到解释仅限于MyISAM。 但是在COUNT(*)的特定情况下,需要注意的是,如果表是MyISAM,则这种解释将变得有效。

'对于维护每个表的行数精确的存储引擎(例如MyISAM,但不维护InnoDB),对于缺少WHERE子句或始终为true且没有GROUP BY子句的COUNT(*)个查询,可能会出现此Extra值 。 (这是一个隐式分组查询的实例,其中存储引擎影响是否可以读取确定数量的行。)

Devang Mehta answered 2020-07-26T18:07:22Z

1 votes

对于innodb表,当查找具有auto_increment的列的最小值或最大值时,我已经看到“选择优化的表”。 information_schema.tables保持最大的auto_increment,因此优化程序可以轻松地仅在此处查看而不用触摸用户表。 对于count之类的东西它是行不通的,因为可能存在间隙,因此优化器必须转到用户表以获取答案。

Mike W. answered 2020-07-26T18:07:42Z

0 votes

很难说却看不到您的查询,但是如果您选择了一个恒定值,这将是结果-

从表中选择1

或不需要您的一个或多个表来回答这个问题。

dkretz answered 2020-07-26T18:08:11Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值