数据库
首页 > 数据库> > 在MySQL EXPLAIN EXTENDED的上下文中,过滤的含义是什么?

在MySQL EXPLAIN EXTENDED的上下文中,过滤的含义是什么?

作者:互联网

MySQL EXPLAIN EXTENDED的上下文中,过滤的含义是什么?

MySQL Docs州:

filtered (JSON name: filtered)

The filtered column indicates an estimated percentage of table rows that will be filtered by the table condition. That is, rows shows the estimated number of rows examined and rows × filtered / 100 shows the number of rows that will be joined with previous tables. Before MySQL 5.7.3, this column is displayed if you use EXPLAIN EXTENDED. As of MySQL 5.7.3, extended output is enabled by default and the EXTENDED keyword is unnecessary.

但我仍然没有线索.例如,100.00表示它是好的吗?如果我有43.61,这意味着什么?好点吗?更差?我应该尝试100.00吗?

它仅供参考吗?假设我有两个类似的查询连接不同的键,但根据SQL ER结构和业务逻辑生成相同的行和值.一个查询报告所有联接的100.00,另一个查询其中一个联接为43.61,其他联系为100.00.我从这个号码中学到了什么?

例:

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | job   | range  | status  | 122     |  512 |   100.00 |
| PRIMARY     | user  | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | item  | eq_ref | PRIMARY | 4       |    1 | -> 43.61 | <--
+-------------+-------+--------+---------+---------+------+----------+

另见

https://dba.stackexchange.com/a/164360

解决方法:

我们没有您的查询可以使用,这真的不是这个问题的正确论坛,但要专门回答您的问题,您希望您的过滤尽可能返回100%的行.当然,如果你查看手册,根据mysql的版本,过滤可能是一个大于100的数字,所以在这种情况下更像是一个比例.

在初始“范围”优化中,使用作业索引时,您没有过滤任何行.所以这是最优的,因为索引完全覆盖了标准,并且不需要减少结果数据.

在步骤2中,这些作业已加入用户.只有1个用户匹配,因此您的中间结果是1个用户* 512个工作.

在您加入项目表的最终联接(eq_ref)中,有1个项目行符合条件.但现在,正在应用一些过滤和1 * 512行,最终只返回43%.这可能会通过索引得到改善,尽管这可能不值得花费.

这是一个很小的结果集,所以它并不是一个大问题,但它告诉你的是mysql必须经过512行并通过过滤做一些额外的减少.

再次没有查询,以及对数据的一些具体理解很难说,但我可以给你一个提示,可以帮助你获得额外的见解是利用format = json参数,它将显示一些额外的信息,特别是rows_examined_per_scan和rows_produced_per_join.

具体你应该试试这个:

explain format=json <your query>

如果您想进一步探索它,可以使用该数据更新问题,但查询也会有所帮助.

标签:mysql,select,sql-execution-plan,filtered-index
来源: https://codeday.me/bug/20190711/1429298.html