Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.总结 ---- 一些查询请求或者工作负载会导致Hive Metastore...2.症状 ---- 在受影响的版本中,某些工作负载可能导致Hive Metastore(HMS)死锁。内部的自动机制可以从这种死锁中恢复。...但是,在高并发且写入较重的工作负载中,HMS从死锁中恢复比查询作业的执行时间还长,于是导致HMS的性能下降或者挂起。反过来影响HiveServer2的性能,从而影响查询性能。...使用此解决方法的副作用可能是某些DDL查询(如删除表和使用相同名称创建的新表)失败,并显示报错“No valid privileges”。重新运行这些查询应该可以解决该问题。...温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件 const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。...key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为...比如我查询的这个9万条数据, 缓存是不生效的, 因为数据量很大 7. 最后解决方案 比较滑稽的事, 上面做了这么多工作, 最后的解决方案是修改sql语句. 换一个写法. 为什么呢?
计算方法:queries / secondes 查询总数 除以 秒数 我们可以在mysql的终端去执行如下命令查看QPS,相信这里大家会有疑惑,现在市面上有很多工具,可以去查看mysql的性能指标,为什么还需要单独去执行命令查看...查询缓存用于缓存select查询结果 当下接收到相同的查询请求时,不再执行实际查询处理而直接返回结果 适用于大量查询数据,很少改变查询结果 怎么样开启query cache?...:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询, 把结果放在临时表里 UNION:若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION...在不损失精确性的情况下,长度越短越好,key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的 ?...,而不是按照表内的索引顺序进行读取。
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引..., FROM子句的子查询) (9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行) 三、table 显示这一行的数据是关于哪张表的,有时不是真实的表名字...primary key或者 unique key作为关联条件 const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为
二、select_type SIMPLE(简单SELECT,不使用UNION或子查询等) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY) UNION(UNION...primary key或者 unique key作为关联条件 const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为
专栏持续更新中:MySQL详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL...select子句的类型 SIMPLE(简单SELECT,不使用UNION或子查询等) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY) UNION...primary key或者 unique key作为关联条件 const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...EXPLAIN不能显示MySQL在执行查询时所作的优化工作 部分统计信息是估算的,并非精确值 EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。
select_type 查询类型 说明 SIMPLE 简单的select查询,不使用union及子查询。 PRIMARY 最外层的select查询。...DERIVED 用于from子句里有子查询的情况。MySQL会递归执行这些子查询,把结果放在临时表里。...UNCACHEABLE UNION UNION中的第二个或随后的select查询,属于不可缓存的子查询。...unique_subquery 在某些IN查询中使用此种类型,而不是常规的ref:value IN (SELECT primary_key FROM single_table WHERE some_expr...,也也没有复杂的查询,建表时也并没有根据相关查询创建索引,而且数据量也不大,因此能够优化的点并不是太多,即使做了优化也不能显著的提升速度及性能,因此就先列了两个简单的小目标,先体验一下explain关键字在
3.subquery——在select或where列表中包含了子查询 4.derived——在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放到临时表中...5.union——如果第二个select出现在UNION之后,则被标记为UNION,如果union包含在from子句的子查询中,外层select被标记为derived,故在union中第二个及之后的select...而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成排序操作称为“文件排序” 2、Using temporary:使用了临时表保存中间结果,mysql在查询结果排序时使用临时表。...derived 在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放到临时表中。...key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的
EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况。 EXPLAIN不考虑各种Cache(缓存)。 EXPLAIN不能显示MySQL在执行查询时所作的优化工作。...我们在进行条件查询时,建议使用索引,否则将引起全表扫描,IO的开销和程序的性能都没法保证!...当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型( system/const )访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。...6 possible_keys 表示查询时,可能使用的索引。( MySQL能使用哪个索引在该表中找到行) 7 key 实际使用的索引(键),必然包含在possible_keys中。...key_len显示的值为索引字段的最大可能长度, 并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。 9 ref 使用哪个列或常数,与索引一起被用于从表中查找索引列上的值。
a.SIMPLE:查询中不包含子查询或者UNION b.查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY c.在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY...d.在FROM列表中包含的子查询被标记为:DERIVED(衍生) e.若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在 FROM子句的子查询中,外层SELECT将被标记为...f.const、system:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量 ?...key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的 ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 ?...MySQL执行计划的局限 •EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况 •EXPLAIN不考虑各种Cache •EXPLAIN不能显示MySQL在执行查询时所作的优化工作
有子查询的语句id可能相同也可能不同 为什么有可能相同也有可能不同的,那是因为查询优化器觉得这条包含子查询的语句可以使用连接查询进行优化, 就会对这条语句进行重写为连接查询,所以想知道查询优化器是否重写了查询语句...在解释id的例子中有。 UNION RESULT:MySQL 选择使用临时表来完成 UNION 查询的去重工作,针对该临时表的查 询的 select_type 就是 UNION RESULT。...MATERIALIZED:当查询优化器在执行包含子查询的语句时,选择将子查询物化之后与外层查询进行连接查询时,该子查询对应的 select_type 属性就是 MATERIALIZED。...,还是全部使用),而不是为了准确的说明针对某个具体存储引擎存储变长字段的实际长度占用的空间到底是占用 1 个字节还是 2 个字节。...key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。
同时,是否为特定类型的工作组织使用了合适的表及表字段也将影响系统性能,比如,数据频繁更新的场景应该使用较多的表而每张表有着较少字段的结构,而复杂数据查询或分析的场景应该使用较少的表而每张表较多字段的结构等...5、MySQL为响应每个用户连接使用一个单独的线程,再加内部使用的线程、特殊目的线程以及其它任何由存储引擎创建的线程等,MySQL需要对这些大量线程进行有效管理。...没有子查询或联合的整个查询只有一个SELECT语句,因此其id通常为1。在联合或子查询语句中,内层的SELECT语句通常按它们在原始语句中的次序进行编号。...select_type: 即SELECT类型,有如下值列表: SIMPLE:简单查询,即没有使用联合或子查询; PRIMARY:UNION的最外围的查询或者最先进行的查询; UNION:相对于PRIMARY...,为联合查询的第二个及以后的查询; DEPENDENT UNION:与UNION相同,但其位于联合子查询中(即UNION查询本身是子查询); UNION RESULT:UNION的执行结果; SUBQUERY
1、使用 Exists 代替子查询 子查询在日常的工作中不可避免一定会使用到,很多时候我们的用法都是这样的: SELECT Id, Name FROM Employee WHERE DeptId In...exist 关键字而不是 In 关键字,当然如果在数据量不大的时候,两种方式都可以,但是当数据量很大的时候,exist 的方式会比 in 的方式效率高很多。...2、适当的使用 JOIN 来代替子查询 除了上面的exist 之外在有些场景我们可以使用 JOIN 来替换子查询,毕竟子查询的效果是很差的,如下所示: SELECT Id, Name FROM Employee...5、使用批处理代替循环 在插入数据的时候的,我们可以使用 values 来批量进行插入,而不是通过循环来进行单条数据的查询,如下所示: //不可取 For(Int i = 0;i 使用 UNION ALL 替代 UNION 在使用联合查询的时候,很多时候我们会使用到 UNION ALL 或者 UNION 来联合多个表,进行汇总。
SIMPLE 简单SELECT,不使用UNION或子查询等 PRIMARY 子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY UNION UNION中的第二个或后面的...有时不是真实的表名字,可能是别名。 type 显示联结类型,显示查询使用了何种类型,按照从最佳到最坏类型排序。...该字段显示为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。...而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成排序操作称为“文件排序” Using temporary 使用了临时表保存中间结果,mysql在查询结果排序时使用临时表。...注: EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况 EXPLAIN不考虑各种Cache EXPLAIN不能显示MySQL在执行查询时所作的优化工作 部分统计信息是估算的
,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引..., FROM子句的子查询) (9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行) 三、table 显示这一行的数据是关于哪张表的,有时不是真实的表名字...primary key或者 unique key作为关联条件 const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为
PRIMARY 子查询中的最外层查询,注意并不是主键查询。 SIMPLE 除子查询或UNION之外的其他查询。 SUBQUERY 子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集。...UNION RESULT UNION中的合并结果。从UNION临时表获取结果的SELECT。 DERIVED 衍生表查询(FROM子句中的子查询)。MySQL会递归执行这些子查询,把结果放在临时表里。...MySQL在查询的字段知识单独的索引的一部分的情况下使用这种连接类型。 fulltext 全文索引扫描。 all 全表扫描。...Comment:当创造表时,使用的注释(或为什么MySQL不能存取表信息的一些信息)。 Version:数据表的'.frm'文件版本号。 Collation:表的字符集和校正字符集。...每个Thread都会自己创建独立的Buffer,而不是整个系统共享的Buffer,不要设置过大而造成系统内存不足。
而优化所使用的策略正是本节要讨论的重点内容,而且优化部分也是整个查询引擎的难点。 子链接(SubLink)如何优化?子查询(SubQuery)又如何处理?对表达式(Expression)如何进行优化?...逻辑优化——整体架构介绍 在未使用第三方提供的优化器时,PostgreSQL将planner函数作为优化的入口函数,并由函数subquery_planner来完成具体的优化操作。...这里也许读者会迷惑,为什么是subquery_planner呢?从名字上看该函数像是用来处理子查询,那么为什么用来作为整个查询语句优化的入口呢(Primary Entry Point)?...子查询语句作为查询语句的一部分,很大程度上与父查询具有相似的结构,同时两者在处理方式和方法上也存在着一定的相似性:子查询的处理流程可以在对其父查询的过程中使用。...按照上述给出的原型,只要完成假定的process_xxx函数,就可以实现对查询语法树的优化工作。是不是觉得很简单?当然不是,原理很简单,但是理论与实际还有一定的距离。
not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。...id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。 select_type 每个子查询的查询类型,一些常见的查询类型。...ref unique_subquery 在子查询中使用 eq_ref ref_or_null 对Null进行索引的优化的 ref fulltext 使用全文索引 ref 使用非唯一索引查找数据...密码散列,盐,用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。...因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。 增加中间表 对于需要经常联合查询的表,可以建立中间表以提高查询效率。
(3)DERIVED 在from子句中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中。...(4)SUBQUERY 在select或where子句中包含了子查询,该子查询被标记为SUBQUERY。 (5)UNION 若第二个select查询语句出现在UNION之后,则被标记为UNION。...可以使用 = 运算符或者 运算符。 在t2表的content列加上普通索引 进行查询 (5)fulltext 查询时使用 fulltext 索引。...(1)Using filesort 说明mysql 会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL 中无法利用索引完成的排序操作称为“文件排序”。...还是使用上面的trb1表举例子 只出现了Using index,说明索引用来读取数据而不是执行查找。 出现了Using where,说明索引被用来执行查找。
创建示例数据库 在我们开始在SQL中进行查询之前,我们将首先创建一个数据库和几个表,然后使用一些示例数据填充这些表。这将使您在以后开始查询时获得一些实践经验。...到目前为止,我们经历过的示例包括SQL查询中一些更常用的关键字和子句。这些对于基本查询很有用,但如果您尝试执行计算或根据数据导出标量值(单个值,而不是一组多个不同的值),则它们无用。...函数只有在与数字数据一起使用时才能正常工作。...UNION运营商的工作方式与JOIN条款略有不同,不是打印从多个表作为使用一个唯一的列结果的SELECT语句,而是用UNION将两个SELECT语句结果结合成一列。...查询多个表的另一种方法是使用子查询。子查询(也称为内部或嵌套查询)是包含在另一个查询中的查询。这些在您尝试根据单独的聚合函数的结果过滤查询结果的情况下非常有用。
领取专属 10元无门槛券
手把手带您无忧上云