问题标签 [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 回答
715 浏览

mysql - MySQL 有索引表和 EXPLAIN 看起来不错,但仍然没有使用索引

我正在尝试优化查询,当我“解释”它时一切看起来都很好,但它仍然出现在“log_queries_not_using_index”中。

这是查询:

所以它像“wallpost”数据一样抓取,然后我加入了 USERS 表以确保用户仍然是活跃用户(数字 1)和另外两个小的“AND”。

当我在 phpmyadmin 中使用 EXPLAIN 运行它时,它显示

它显示 t1 查询使用“WHERE”找到 35 行,t2 查询使用“WHERE”找到 1 行(用户)

所以我不知道为什么它会出现在 log_queries_not_using_index 报告中。

有小费吗?如果您需要,我可以发布更多信息。

0 投票
2 回答
3342 浏览

mysql - 解释 MySQL 解释执行计划数学,两个计划之间的区别

我有一个与解释相关的基本 MySQL 性能问题。我有两个返回相同结果的查询,我试图了解如何理解EXPLAIN执行计划。

该表中有 50000 条记录,我正在执行记录比较。我的第一个查询需要 18.625 秒才能运行。解释计划如下。

我的下一个查询需要 0.106 秒才能运行...

在文档中它说ALL需要进行全表扫描,这非常糟糕。它还说filesort需要额外的传递来对记录进行排序,它还说这Not exists意味着 MySQL 能够进行LEFT JOIN优化。很明显,第一种方法使用索引,而第二种方法没有。

我试图弄清楚这里发生了什么以及涉及到什么数学。我RESET QUERY CACHE在测试之间跑来跑去,以确保不会获得任何不公平的优势。49520 x 413 x 4 比 50000 x 49520 小很多。

id解释计划中的有关吗?

当我测试这些和其他查询时,我的观察似乎是查询复杂性可以通过将具有相同 id 的项目相乘并将每个 id 的结果加在一起来近似......这是一个有效的假设吗?


额外的

按照评论中的要求,架构和查询以防万一,但我不是在寻找更好的查询......只是对EXPLAIN. 有问题的表...

第一个查询...

第二个查询...

我还注意到,如果我删除索引eventScore,查询下降到 2.531 秒并且执行计划没有太大变化,但是 possible_keys 的顺序发生了变化并且它不适Using index用于表b(忽略我正在生成的行数的细微变化每次更改架构时的数据)...

0 投票
1 回答
807 浏览

ruby-on-rails-3 - 了解 Rails / PG 解释

我知道这是一个尴尬的问题..但我不明白什么EXPLAIN解释..

我的查询是User.last,花了超过 0.5 秒这可能是最简单的查询,但似乎解释解释它有困难..

我不明白什么是QUERY PLAN 宽度之后的任何内容?什么是成本?它如何解释查询在哪里花费了更多时间?

0 投票
1 回答
1075 浏览

mysql - MySQL 查询忽略 where 子句的索引

我有一个表,其中有一列名为“日期”。

桌子看起来像这样

我对此表执行以下查询:

然后我做了以下事情:

这个解释的结果是

为什么我会得到 ALL 类型?据我所知,这基本上意味着查询将检查表中的每一行并忽略日期索引。虽然我希望mysql会使用它。

这里发生了什么,为什么忽略日期索引?

0 投票
1 回答
164 浏览

mysql - 如何知道 MySQL 中使用了哪些索引?

我的 MYSQL 数据库中有一个表,其中创建了许多索引,但我不知道这些索引中的哪些有用,哪些没有。我想知道生产中使用的索引是什么。

有没有办法使用索引日志?

我知道 EXPLAIN 命令,但这是针对一个特定查询的。我有一个复杂的系统,所以我无法确切知道正在使用的查询是什么。我可以打开通用日志,获取所有查询并对所有查询进行解释,然后获取汇总结果,但必须有一种更简单的方法来做到这一点。

0 投票
1 回答
1675 浏览

mysql - MySQL:对分析表的随机影响

我有 3 个innodb表,比如 A、B 和 C。有一个查询可以连接这三个表以生成结果。

一开始,当我使用“解释”命令测试查询时,它给了我以下顺序:

B -- C -- A

然而,这不是最优的。所以我对所有表运行“分析表”,它给了我:

A -- B -- C

,我相信这是正确的顺序。

然后我将SQL部署到生产中,1​​个月后,无缘无故的执行计划切换回了不好的选项,即B--C--A。之后,我ANALYZE TABLE又尝试了几次运行,但这一次,结果让我感到困惑。有时它也给我 B--C--A,有时它给我 A--B--C,有时甚至是其他执行计划。

所以我的问题是:

  1. 为什么部署后执行计划会发生变化?
  2. 除了固定执行计划(数据更新和变化很快,所以未来可能会改变最优计划),有没有办法保证最优计划总是得到保证?
0 投票
1 回答
1760 浏览

mysql - MySQL 解释 vs 慢日志

使用 MySQL (5.1.66) 解释说它只会扫描 72 行,而“慢日志”报告整个表已被扫描 (Rows_examined: 5476845) 这怎么可能?我无法弄清楚查询有什么问题

*name*是一个字符串唯一索引, *date*只是一个常规的 int 索引

这是解释 EXPLAIN SELECT * FROM table WHERE name LIKE 'The%Query%' ORDER BY date DESC LIMIT 3;

慢日志的输出

# Query_time: 5.545731 Lock_time: 0.000083 Rows_sent: 1 Rows_examined: 5476845 SET timestamp=1360007079; SELECT * FROM table WHERE name LIKE 'The%Query%' ORDER BY date DESC LIMIT 3;

0 投票
2 回答
774 浏览

xml - 在 PostgreSQL 数据库中存储 XML 解释计划

如何在 PostgreSQL 数据库中存储 XML 解释计划(或任何其他格式)?

测试数据:explain (verbose, format xml) select 1

存储结果的表:create table tmp.explain_plan_data (expp xml);

我天真的测试失败了:

似乎解释不能在任何其他select语句中使用,以下语句也不起作用:

我们正在使用 PostreSQL 9.1.6

0 投票
2 回答
5107 浏览

mysql - EXPLAIN 声明说'使用 where; 如果在查询中设置了 USE INDEX(),则使用索引,否则只说“使用 where”

我有一个具有以下结构的应用程序表

我在这张表上有两个索引-:

我运行这个查询

它输出以下信息-:

但是当我运行这个查询时

它输出以下信息-:

为什么它说Using index第二次,尽管它在两种情况下都使用相同的索引?

0 投票
2 回答
755 浏览

mysql - 优化查询创建索引以从查询计划中使用临时和使用文件排序删除

我有这个查询,我已经优化了它的运行时间是一开始的一半。

现在我想改进它创建一些索引的执行,但还没有找到方法。

查询是:

执行计划是:

我在 centros 表(centro_id、centro、segcupones)上创建了一个覆盖索引,但性能没有提高(或几乎没有提高)。现在执行计划显示使用索引但也使用临时和文件排序。

我还为表 usuariohist (DERIVED) 创建了索引,但没有成功,查询计划仍然相同。我试过这些索引:(fecha, id), (usuario_id, fecha, id) 和一个覆盖索引 (usuario_id, fecha, id, web, comentario)。

所涉及表的索引:

任何人都知道我如何优化这个查询创建索引,请解释解决方案。

提前致谢!