mysql filtered_MySQL Explain详解

MySQL的Explain命令用于分析SQL语句的执行计划,其中'filtered'表示通过表条件过滤出的行数的百分比估计值。理解filtered有助于优化查询性能,避免全表扫描,提高查询效率。
摘要由CSDN通过智能技术生成

340749bc70f212bb0444db8f067def7e.png

利用explain命令查看SQL语句的执行计划:

11313293.html

bd0a1a54be2e760d9b7e5e9e15880f77.png

概要描述:

1

id

select的识别符,这是select的查询序列号。

2

select_type:

select的类型。SELECT类型,可以为以下任何一种:

SIMPLE(simple):简单SELECT(不使用UNION或子查询)。

PRIMARY(primary):子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY。

UNION(union):UNION中的第二个或后面的SELECT语句。

DEPENDENT UNION(dependent union):UNION中的第二个或后面的SELECT语句,取决于外面的查询。

UNION RESULT(union result):UNION的结果,union语句中第二个select开始后面所有select。

SUBQUERY(subquery):子查询中的第一个SELECT,结果不依赖于外部查询。

DEPENDENT SUBQUERY(dependentsubquery):子查询中的第一个SELECT,依赖于外部查询。

DERIVED(derived):派生表的SELECT (FROM子句的子查询)。

UNCACHEABLE SUBQUERY(uncacheablesubquery):(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

3

table

输出结果集的表格。

4

partitions

匹配的分区。

5

type

对表访问方式。表示MySQL在表中找到所需行的方式,又称“访问类型”。

”访问类型“,按照从 '' 最佳类型--最坏类型 '' 进行排序:

NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

system:表仅有一行(=系统表)。这是const联接类型的一个特例。当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型( system/const )访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。当查询的表只有一行的情况下,使用system。

const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!

eq_ref:类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件。这可能是最好的联接类型,除了const类型。

ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。

index_merge:该联接类型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题是关于MySQLEXPLAIN语句中的filtered字段的详细解释。filtered字段是指经过WHERE条件筛选后,预计返回结果行数与表的总行数之比。这个字段的值越接近0,表明查询条件过于严格,无法匹配大多数行,需要优化查询。而如果这个字段的值接近1,则表明查询条件与大多数行匹配,查询效率较高。 ### 回答2: 在MySQL中,EXPLAIN命令可以帮助我们了解我们的查询执行计划。filteredEXPLAIN中的一个常见术语。 filtered表示MySQL服务器在执行完WHERE语句后有多少行符合条件。筛选率是0到1之间的数字,其中0表示没有行被选中,1表示所有行都被选中。 筛选过程是在执行查询时应用的过滤规则。这些过滤规则是由WHERE、HAVING和JOIN子句中的限制条件和连接条件定义的。可用筛选率计算公式如下所示: filtered = (过滤器前行数/扫描到行数) 此筛选过程不同于器计划中的扫描率(scan rate),扫描率仅指扫描过程筛选的行数和所有行数的比率,筛选率则考虑了WHERE条件或JOIN条件的使用。 通过筛选率可以优化查询执行计划。我们可以对高filtered的查询进行优化,以减少执行查询的开销,并提高查询的效率。常见的优化方式包括: 1. 对筛选率高的WHERE语句使用索引,以减少扫描所需的行数,达到更快的查询执行速度。 2. 考虑重构查询。在某些情况下,可以使用不同的查询方式来达到相同的结果,但这些查询方式可以更高效地筛选所需的行。 3. 考虑压缩数据。对于一些特别的数据类型或存储结构,比如BLOD类型的数据,可以考虑对其进行压缩,以减少扫描的行数,达到更快的查询速度。 总之,在MySQL中,筛选率filtered是一个非常重要的指标,可以根据此指标来优化查询执行计划,提高查询性能。 ### 回答3: MySQLExplain语句可以用于分析SQL查询的执行计划和性能。其中,filtered字段表示查询中被过滤掉的数据比例,它是一个0到1之间的小数,越接近于1表示过滤掉的数据越少,优化器选择索引的效果越好。 MySQL在执行查询计划时,会根据表的统计数据和索引信息,计算出查询条件对于索引的匹配程度(selectivity),也就是查询结果的过滤率(filtered)。 例如,假设有一张名为students的学生表,其中有字段id、name、gender和class_id。查询所有class_id等于1的学生记录: explain select * from students where class_id = 1; 查询结果中,filtered值为0.10,表示查询结果会对所有记录进行全表扫描,并过滤掉90%的数据。这是因为class_id字段上没有建立索引,查询会扫描整张表,把class_id字段等于1的记录过滤出来。 如果为class_id字段建立索引,则上面的查询可以优化: alter table students add index idx_class_id(class_id); explain select * from students where class_id = 1; 查询结果中,filtered值为0.50,表示优化器选择了idx_class_id索引,查询会扫描索引树并查询出符合条件的记录。因为对于class_id=1的值,索引的查询selectivity为50%,优化器选择了索引后只需要扫描一半的数据,大大提升了查询性能。同时,filtered值也会提高,因为优化器可以更准确地估算出查询结果的过滤比例。 在实际应用中,选择合适的索引可以极大地提升查询性能,但是要注意过度索引会带来维护和存储成本。因此,在设计数据库结构时需要根据实际业务需求和查询性能要求,进行合理的索引设计和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值