问题标签 [explain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
212 浏览

mysql - 了解 EXPLAIN 语句的输出 (MySQL)

我有一个查询返回以下说明:

这是否表明查询到处都在使用索引,还是可以通过添加其他索引来改进?基于此:http ://dev.mysql.com/doc/refman/5.1/en/explain-output.html ,它提到该key列显示实际使用的索引。我对每一列都有一个索引。

有问题的查询如下:

表有大约 140,000 条记录。此查询需要 3 秒执行,并返回 135,725 作为结果。

0 投票
1 回答
761 浏览

sql - 解释分析中嵌套反循环的成本

我通过解释分析得到以下输出:

我不明白为什么循环反连接成本为 36.92。

在其他站点中,我看到了循环的公式:上部扫描成本 + 上部行 * 内部成本。

但我的成本是 36.92,所以没办法。dbmanager 如何解决此查询?

0 投票
1 回答
101 浏览

mysql - MYSQL:LEFT JOIN 运行缓慢

我有两张桌子:

表格1

表 2

然后我确实离开了两个表:

这个查询使我的 Jquery DataTable 插件运行非常慢,即使数据没有显示。奇怪的是这个字段B.name,如果我在查询中提到它,数据不会出现,但如果我删除它,数据就会出现(我的意思是不做LEFT JOIN)。

我的查询是否不够好?这是我的EXPLAIN

0 投票
1 回答
219 浏览

mysql - 为什么“解释”命令在同一个 SQL 语句上产生不同的结果?

我将 MySQL 数据库从一个环境迁移到另一个环境,并发现迁移后,特定查询的运行速度比原来慢得多。

我正在调查带有“解释”关键字(如下)的语句,发现“解释”命令在不同的服务器上给出了不同的输出。

对于原始版本,它给出:

同样的语句在新环境中产生不同的输出:

0 投票
2 回答
792 浏览

mysql - MySQL EXPLAIN 语句在类型上显示 ALL

我有一个快速且非常简单的问题。

我有一个带有以下 SQL 的表:

当我尝试运行如下 EXPLAIN 语句时:

我收到的结果表明我有一个type = ALL.

但是,当我尝试运行 EXPLAIN 语句时:

我收到的结果表明我有一个type = REF.

我想我的问题是为什么第一个查询显示 ALL 而第二个查询显示 REF。

如果有人能对此有所了解,将不胜感激!谢谢!!

0 投票
1 回答
142 浏览

mysql - 索引未显示为可能的键

我有几个查询,我为它们创建了 2 个单独的索引,我知道目前它并不需要使用它们,因为表不包含那么多行;但是,possible key当我使用EXPLAIN.

一个示例查询是:

备用查询只是在状态之前添加了另一个AND子句,例如:

现在,我添加了以下两个索引:

但是,MySQL 仅将以下索引显示为可能的键:

我的索引错了吗!?为什么这样做?

0 投票
2 回答
2656 浏览

mysql - mysql - OR 运算符不使用索引

我有一个简单的邀请表:

我想选择邀请人 70 对被邀请人 62 的邀请,反之亦然:

但是这个查询是 ALL 类型的,并且不使用受邀者_邀请者_idx。请告诉我这里有什么问题?

谢谢!

==EDIT== 抱歉,我对架构有误,它还有一个字段:request_ts。这次查询计划是 ALL。

这是我的解释结果:

0 投票
2 回答
178 浏览

mysql - MySql Explain 忽略特定查询中的唯一索引

我第一次开始深入研究索引,并第一次从用户表开始分析我们的数据库。我搜索了 SO 以找到一个类似的问题,但我猜无法很好地构建我的搜索。

我正在经历一个特定的概念,这第一次观察让我想知道 - 这些解释的区别[区别:第一个查询正在使用'a%',而第二个查询正在使用'ab%']

[表中的总行数users= 9193 ]:

在此处输入图像描述

(实际上匹配列 = 1240

在此处输入图像描述

(实际上匹配列 = 109

索引如下所示: 在此处输入图像描述

我的问题: 为什么在第一个查询中完全忽略了索引?mySql 是否认为不使用索引是一个更好的主意case 1?如果是,为什么?

0 投票
2 回答
13236 浏览

mysql - 如何解释 MySQL EXPLAIN 的输出?

我想从中选择列的text内容entrytable

该表具有三个索引:

  • index_user(用户)
  • index_datum(基准)
  • index_status_mit_spam (status, status_spam_user, status_spam_system)

解释结果是:

  • possible_keysMySQL 可能想要使用keys的索引和 MySQL 实际使用的索引吗?
  • 为什么index_status_mit_spam不使用索引?在查询中,列的顺序与索引中的相同,...
  • 为什么索引index_datum不用于ORDER BY?
  • 如何优化我的表索引或查询?(上面的查询最多需要 3 秒,表中有大约一百万个条目)
0 投票
3 回答
1093 浏览

mysql - MySQL 优化 UNION 查询

我正在尝试优化查询。

我的问题似乎与MySQL、Union ALL 和 LIMIT相似,答案可能相同(恐怕)。但是,在我的情况下,有更严格的限制 (1) 以及日期时间列上的索引。

所以我们开始:

为简单起见,让我们只有一个包含三个列的表:

  • md5 (varchar)
  • 值(varchar)。
  • 最后更新(日期时间)

(md5, updated) 上有一个索引,因此在 md5 键上选择,按更新排序并限制为 1 将得到优化。

搜索应返回最多与 10 个 md5 键之一匹配的记录。键具有优先级。因此,如果有 prio 1 的记录,它将优先于 prio 2、3 等的任何记录。

目前使用 UNION ALL:

它有效,但如果提供 10 个键,UNION 似乎会执行所有 10 个查询。

但是,从业务角度来看,按顺序运行选择并在第一次匹配后停止是可以的。

这可能是普通的 SQL 吗?

或者唯一的选择是存储过程?