AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 164251
Accepted
Iman Tumorang
Iman Tumorang
Asked: 2017-02-15 02:02:39 +0800 CST2017-02-15 02:02:39 +0800 CST 2017-02-15 02:02:39 +0800 CST

MySQL解释中过滤的含义是什么?

  • 772

如MySQL 文档中所述:

过滤列表示将按表条件过滤的表行的估计百分比。也就是说, rows 显示检查的估计行数, rows × filters / 100 显示将与以前的表连接的行数。在 MySQL 5.7.3 之前,如果您使用 EXPLAIN EXTENDED,则会显示此列。从 MySQL 5.7.3 开始,默认启用扩展输出,不需要 EXTENDED 关键字。

我还是不明白。这里的“过滤”是什么意思?我们可以从这个专栏中得到什么信息?

例如,当我开始查询时,一些查询将显示 100,而另一些则显示 18 或低于 100 的任何值。

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  | <--
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | c     | ALL    | PRIMARY | 4       |    1 |   100.00 |

我们可以从这个值得出的主要结论是什么?

是说该列仅过滤了 18% 吗?还是说分数越低,索引或查询越好?

我正在使用 MySQL 5.7。

mysql innodb
  • 1 1 个回答
  • 42526 Views

1 个回答

  • Voted
  1. Best Answer
    Solarflare
    2017-02-15T16:18:49+08:002017-02-15T16:18:49+08:00

    在此处过滤意味着对由type-search 选择为潜在行的一组行应用条件,并仅保留满足条件的行:

    MySQL 将首先尝试使用索引,例如使用-keyrange对您的表进行扫描。它估计使用该索引可以获得 174 行,这是. 此步骤尚未称为过滤。asearchrows

    之后,必须根据附加条件检查这 174 行(通常在您的 -where子句中)。MySQL 现在估计只有 32 行,因此这 174 行中的 18% 将在应用该过滤器后保留。这 18% 是 中的值filtered。

    虽然拥有 32 行而不是 174 行显然更好(例如,如果您必须稍后join使用另一个表),但“完美”索引会直接从初始搜索中为您提供这 32 行,从而节省您查看的时间并过滤掉所有潜在行的 82%。

    因此,较低的值可能表明可能存在更好的索引:例如,如果您添加了一个良好的索引,则使用 and 的全表扫描可能会rows=1000成为filtered=0.1%索引查找。rows=1filtered=100%

    另一方面,您可以完全忽略此filtered值(无论如何,在大多数情况下,这是一个非常糟糕的估计),并专注于其他更重要的列(尤其是type,key和extra)来优化您的查询。例如,最好去掉 a filesort(例如通过使用满足 的索引order by),即使它会导致较低的filtered值。更好的type可以带来巨大的性能改进,即使它可能不会改变甚至更低filtered。在上面的示例中,使用filtered=0.1%,type=all已经足以表明您可以通过添加索引来改进该查询,而无需查看filtered。

    所以不要太认真地对待这个值:既不100意味着你的索引是好的,一个较低的值也不一定表示坏的索引。type是一个更好的指标。

    • 67

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve