当前位置: 首页 > 面试题库 >

MySQL Explain计划中“选择经过优化的表”的含义

陆英毅
2023-03-14
问题内容

Select tables optimized awayMySQL 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为便于阅读,已编辑输出。


问题答案:

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

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

select count(comment_count) from wp_posts;

那真的是你的本意吗?这与只是一样SELECT COUNT(*)...(假设comment_count不能为NULL,不能为之,否则您就不会获得优化)。如果您总共comment_count要使用s
SUM(comment_count),则不会获得``优化离开’‘的行为。



 类似资料:
  • 问题内容: 我看过一些定义选择字段的示例,如下所示: (来源:http : //code.djangoproject.com/ticket/5446 另请参见:http : //djangosnippets.org/snippets/494/) 下划线的含义是什么?为什么在元组中的第二个值甚至加上括号? 问题答案: 前划线是国际化(i18n)机制使用的ugettext函数之一的常用函数别名。 这意

  • 问题内容: 我有一个统计表,该表的增长速度非常快(每天约有2500万行),我希望针对选择进行优化,该表可容纳内存,并且服务器具有大量备用内存(32G,表为4G)。 我的简单汇总查询是: 统计信息是一个innodb表,在结束时间上有一个正常的索引。 注意:我确实计划添加汇总表,但是目前这是我所坚持的,并且我想知道是否有可能在没有其他应用程序代码的情况下对其进行修复。 问题答案: 我一直在做本地测试。

  • 问题内容: 我在Sql Server 2008上有这样的查询: 在上面看到的选择查询中,SqlServer是否优化查询以免一次又一次地计算DATEADD结果。还是将DATEADD结果存储在临时变量中是我自己的责任吗? 问题答案: 令人惊讶的是,我发现内联使用GETDATE()似乎比预先执行这种类型的计算更有效。 如果您检查这些计划,则中间查询将始终以最低的成本(但并非总是最低的花费时间)出现。当然

  • 我认为这不会太复杂而无法解释,但肯定会很复杂,无法让它发挥作用。 首先,我有两个关于用户评论的表格,每个部分(论坛、文章等)一个表格,如下所示: site_用户(id、用户名等)[保存用户信息的表] site_articles_comments(id,user_id,注释,...)[其中user_id=site_users.id] site_forum_comments(id,user_id,注释

  • 问题内容: 我正在尝试从以下查询中获取行数。我只得到行计数为1,但有35条记录。您能否让我知道如何从内部查询中获取计数? 谢谢 问题答案: 您缺少FROM,需要为子查询指定别名。

  • 我有一个从数据库中提取下拉选项的工厂: 然后,我将该数据应用于控制器中的下拉列表/选择: 下面是select标记的外观: 放入$scope的下拉列表数据。临床DDL如下所示: 从 DB 返回的用户数据如下所示: 在我的控制器中,我填充了下拉列表/选择,然后我获取了一个用户ID并将其提交给DB以获取用户信息。这些用户信息会返回。然后,我想根据DB返回的“DefaultLocationId”从先前填充