问题标签 [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 投票
3 回答
279 浏览

mysql - 需要一些帮助来破译复杂连接的 MYSQL EXPLAIN 输出

我网站的主页有一个复杂的查询,如下所示:

我不会用确切的细节让你厌烦,而是做一个简短的解释:基本上这是系统中发生的事件列表,有点像流。一个事件可以有多种类型,并且根据其类型,它需要加入来自各种表的特定数据。

目前,此查询需要 2 秒才能运行,但随着条目数量的增加,它会随着时间的推移而变慢。因此,我正在寻求优化它。这是MYSQL解释的输出:

在此处输入图像描述

我对 EXPLAIN 的理解太有限,无法理解这一点。我宁愿保持这个查询原样(而不是对其进行非规范化),但要使用适当的索引或其他快速获胜来提高其性能。根据这个解释输出,你有什么可以跟进的吗?

编辑:根据要求特此定义 karmalog 表:

0 投票
1 回答
2787 浏览

sql - postgres sql解释删除语句

问题。在这个来自 postgres 的回报中EXPLAIN DELETE FROM ...

成本 19474 是否意味着以秒为单位的执行时间?就像 19474 秒 = 5.4 小时?

谢谢!

0 投票
4 回答
993 浏览

mysql - 简单的 MySQL 索引问题

我有这张桌子:

我用 10 000 000 行填充此表。按日期重新分区是同质的

这是结果

=> 没有解释 3.6 秒,结果为 3000 行(大约)

如您所见,未使用索引,并且它不是 possible_keys 列的一部分!

具有覆盖索引方式的相同请求

结果:

=> 没有解释 2.8 秒,结果为 3000 行(大约)

为什么 MySQL 不能正确使用这个索引(日期)???

信息: - VM Server(我们的开发环境,我不知道硬件组成是什么) - MySQL 5.5.8

结果:

  • 对于日期 2014-03-04 => 3134 行
  • 总计(汇总)=> 7 875 488
  • 表中有 2556 个不同的“日期”值
0 投票
1 回答
2652 浏览

mysql - 在某些情况下避免 MySQL '使用临时'

我有两张桌子,users并且followers

users

该表在id和上编制索引joined

表“追随者”:

该表在users和上编制索引follows

此查询查找在特定时间后加入的特定用户后跟的所有用户的名称。结果需要按时间倒序排列。

现在,当用户 X 有大量关注者时,EXPLAIN 给出以下内容:

到现在为止还挺好。(“使用 where”是由于我为简洁起见删除了其他一些子句)。

但是,当用户 X 的关注者数量较少时,会发生这种情况:

如果我省略ORDER BY,我会得到:

MySQL 优化器似乎正在检查它必须处理的行数,如果它很小,则 followers首先执行表。它似乎ORDER BY在其优化步骤中忽略了 ,导致由于临时表而导致查询速度较慢。

所以(最后),我的问题是:是否可以强制 MySQL 执行表搜索的顺序,并且在可能的情况下这是不可能的,还有其他方法可以摆脱using temporary吗?

0 投票
3 回答
1212 浏览

mysql - MySQL解释输出

有谁知道之间的区别

使用索引

使用哪里;使用索引

在 mysql 的解释输出中(在 Extra 中)?

再生产:

mysql> 解释 select count(1) from tmp_t1 where a=1 \G

mysql> 解释 select count(1) from tmp_t1 where b='b1' \G

有谁知道为什么在第一种情况下额外字段中只有“使用索引”,而在第二种情况下是“使用 where;使用索引”?案例之间的区别在于,第一个案例在整数上运行 WHERE,而第二个案例在 varchar(50) 字段上执行。但是这有什么关系??

谢谢你的帮助!

0 投票
1 回答
86 浏览

mysql - 我如何为 MySQL“解释”设置虚拟值?

例如,这是我的代码。我想在 MySQL 中解释这个查询,但我没有值来放置 story_id。我如何用虚拟 id 解释它?我希望 MySQL 给我一个解释语句,就好像 story_id 是“9”,比方说。

基本上,我只想让 MySQL 解释这个查询,即使我没有提供 story_id 或 user_id。

0 投票
2 回答
3311 浏览

mysql - mysql。为“OR”查询创建索引

我有一个包含 200k 个条目的表,其中包含 INT 列。我想创建一个索引以使查询更快。这是我要执行的查询:SELECT A,B,C,D,E FROM table WHERE A=23 and (B=45 or C=43)。我创建了以下索引:B, ACD, C, ABC.

通过该EXPLAIN命令,我发现 MySQL 选择了 index ACD。所以我不断地用更多的值填充表,我意识到 MySQL 在上面的索引之间切换(并不总是相同的)。

由于有许多插入,拥有各种索引会导致性能问题,我们可以假设该表被其他需要不同列的查询访问,其中每个索引都有意义。

我知道USE INDEX(),但我想了解我们是否应该信任 MySQL 来选择正确的索引。

0 投票
3 回答
96 浏览

mysql - 需要帮助使用连接优化 MySQL 查询

我仍然无法理解如何阅读、理解和优化 MySQL 解释。我知道在 orderby 列上创建索引,但仅此而已。因此,我希望您能帮助我调整此查询:

这个查询的作用是找到一个物种业力最大的照片。你可以看到这个live的结果:

http://www.jungledragon.com/species

我有一个物种表、一个图像表、一个介于两者之间的映射表和一个图像文件表,因为每个图像有多个图像文件(格式)。

解释输出:

在此处输入图像描述

对于 specie 表,我在其主要 id 和字段 commonname 上有索引。对于图像表,我在它的 id 和 karma 字段上有索引,还有一些与这个问题无关的索引。

这个查询目前需要 0.8 到 1.1 秒,在我看来这太慢了。我怀疑正确的索引会加速很多倍,但我不知道是哪一个。

0 投票
1 回答
324 浏览

mysql - MySQL慢查询:统计文章,按类别分组,有什么办法优化?

有没有办法优化这个查询?它需要超过 2.5 秒。

我已经使用缓存,所以在代码方面没有问题。

这是解释 sql 结果:

谢谢。

0 投票
4 回答
358 浏览

mysql - 让 MySQL 从多个索引中读取?

让我们从一个简单的例子开始:

所以 2 列,都被索引。我认为这意味着 MySQL 将不再需要读取实际的表,因为所有数据都存储在索引中。

“使用索引”,非常好。据我了解,这意味着它是从索引中读取数据,而不是从实际表中读取数据。但我真正想要的是“价值”列。

嗯,这次没有“使用索引”。

我认为如果我添加一个涵盖两列的索引可能会有所帮助。

现在让我们再次运行之前的选择语句并告诉它使用新索引。

赞美主,它是从索引中读取的。

但实际上我并不真的需要组合索引来做其他事情。是否可以让 MySQL 从 2 个单独的索引中读取?

任何见解将不胜感激。

编辑:好的,还有另一个例子。这个是原始表定义(所以每列都有一个索引)。

这肯定必须从两个索引中读取(因为在连接条件中使用了两个字段)但它仍然从实际记录中读取数据,对吗?为什么它不只使用从索引中读取的数据?还是它实际上使用了这些数据而不说“使用索引”?

再次感谢