---- CDA数据分析师 出品 导读:本文主要介绍SQL环境下的关联子查询,如何理解关联子查询,以及如何使用关联子查询解决组内筛选的问题。...什么是关联子查询 关联子查询是指和外部查询有关联的子查询,具体来说就是在这个子查询里使用了外部查询包含的列。...因为这种可以使用关联列的灵活性,将SQL查询写成子查询的形式往往可以极大的简化SQL语句,也使得SQL查询语句更方便理解。...关联子查询的执行逻辑 在关联子查询中,对于外部查询返回的每一行数据,内部查询都要执行一次。另外,在关联子查询中是信息流是双向的。...关联子查询的做法 通过设置表别名的方法,将一个表虚拟成两个表进行自连接,并且使用关联子查询,内部查询返回的结果,传递给外部查询进行比较筛选。
前言 开发与维护人员避免不了与 in/exists、not in/not exists 子查询打交道,接触过的人可能知道 in/exists、not in/not exists 相关子查询会使 SELECT...UPDATE、DELETE 子查询条件下优化器的实现导致子查询下的行锁机制失效,行锁升级,对更多无关的行数据加锁,进而影响数据库并发和性能 。...一、UPDATE、DELETE 子查询锁机制失效解析及优化方案 下面以普通的 UPDATE 关联子查询更新来详解子查询对锁机制的影响及具体优化解决方案: 子查询下的事务、锁机制分析: 优化器实现: UPDATE...,优化器先执行了 id 为2的 (DEPENDENT SUBQUERY )相关子查询部分,然后通过对 PRIMARY 以索引全扫描方式对全表 155041 行数据加锁主锁,来执行的 update 操作,...,锁住了表中数据行,阻碍了对表的 delete,update 操作,却不妨碍 insert 的并发操作,MySQL 5.6 之后的优化器对 not in 子查询做了相关优化工作,检索效率高于 not exists
有时我们需要查询某个字段是否包含某值时,通常用like进行模糊查询,但对于一些要求比较准确的查询时(例如:微信公众号的关键字回复匹配查询)就需要用到MySQL的 find_in_set()函数; 以下是用...find_in_set()函数写的sq查询l语句示例: $keyword = '你好'; $sql = "select * from table_name where find_in_set('"....$keyword"',msg_keyword) and msg_active = 1"; 以下是在tp框架中使用find_in_set()函数的查询示例: $keyword = '你好'; $where...数据库中存的关键字要以英文“,”分隔; 2.存储数据要对分隔符进行处理,保证以英文“,”分隔关键字。...以上这篇使用tp框架和SQL语句查询数据表中的某字段包含某值就是小编分享给大家的全部内容了,希望能给大家一个参考。
对于读取,从数据库中提取相当多的行,但只提取列的一小部分。...如果你不这样做,使用任何一个机械硬盘,查询引擎都不可避免的停止CPU进行等待。所以,在数据按列存储并且按列执行是很有意义的。...当 INSERT 语句中使用 Values 格式时,看起来数据部分的解析和解析SELECT 中的表达式相同,但并不是这样的。 Values 格式有非常多的限制。...用法注意 别名在当前查询或子查询中是全局可见的,你可以在查询语句的任何位置对表达式定义别名 别名在当前查询的子查询及不同子查询中是不可见的。...详情请参见“select”部分 表达式 表达式是函数、标识符、字符、使用运算符的语句、括号中的表达式、子查询或星号。它也可以包含别名。 表达式列表是用逗号分隔的一个或多个表达式。
需要引用号的标识符——如果你必须使用这样的标识符,最好坚持用SQL92的双引号来提高可移植性。 面向对象编程的原则不该应用到结构化查询语言或数据库结构上。...只在名字中使用字母、数字和下划线。 不要在名字中出现连续下划线——这样很难辨认。 在名字中需要空格的地方用下划线代替。 尽量避免使用缩写词。使用时一定确定这个缩写简明易懂。...避免直接使用id做表的主标识符。 避免列名同表名同名,反之亦然。 总是使用小写字母,除非是特殊情况,如专有名词。...在代码中形成一个从上到下的“川流”,这样帮助读者快速扫描代码并将关键字和实现细节分开。川流在排版时应该避免,但是对书写SQL语句是有帮助的。...Subqueries 子查询 子查询应该在川流的右侧对齐并使用其他查询相同的样式。有时候将右括号单独置于一行并同与它配对的左括号对齐是有意义的——尤其是当存在嵌套子查询的时候。
1、使用REPLACE INTO来插入或替换数据,避免先删除再插入的操作。...这种方法避免了先删除再插入的过程。 2、通过SET GLOBAL sql_mode=''来临时禁用SQL严格模式。...SET GLOBAL sql_mode=''; 注释:这将在当前会话中禁用SQL严格模式,使得一些非标准的SQL语句能够执行。 3、利用EXPLAIN语句来分析查询性能,找出潜在的性能瓶颈。...26、利用SUBSTRING_INDEX函数提取字符串中的子串。...33、使用存储点(Savepoint)在事务中实现部分回滚。
使用带分隔符的标识符允许列别名包含空格、其他标点符号或作为SQL保留名称。...列别名与所有SQL标识符一样,不区分大小写。 其他SELECT子句中列别名的使用由查询语义处理顺序控制。 可以通过ORDER by子句中的列别名引用列。...但是,可以使用子查询使列别名可用来供其他这些其他SELECT子句使用。 字段列别名 选择项字段名不区分大小写。...相反,可以使用字段列别名来避免字母大小写问题。 注意,对字段列别名的所有引用必须以字母大小写匹配。...下面是有效的等价语法: FROM Sample.Person P t-alias名称必须是有效的标识符。 别名可以是分隔的标识符。 t-alias在查询中的表别名之间必须是唯一的。
定位执行效率较低的SQL语句 开启慢查询记录(在相应的配置文件中添加慢查询记录sql最长时间阈值) 3、通过Explain分析低效率的SQL语句的执行情况 -- 实际SQL,查找用户名为Jefabc...概要描述: id:选择标识符,优先级 select_type:表示查询的类型。...二、select_type查询中每个select子句的类型 PRIMARY:包含子查询SQL中的 主查询 (最外层) SUBQUERY:包含子查询SQL中的 子查询 (非最外层) simple:简单查询...(不包含子查询、union) derived:衍生查询(使用到了临时表) 三、table 显示这一步所访问数据库中表名称(显示这一行的数据是关于哪张表的),有时不是真实的表名字,可能是简称,例如上面的...(0,多) eq_ref:唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多 、不能0) const:仅仅能查到一条数据的SQL ,用于Primary key 或unique
在MyBatis中,标签可以用来定义一个可复用的SQL片段,可以在多个地方进行引用,避免了重复书写SQL语句的繁琐和出错。...语法如下: SQL语句片段其中,id属性表示SQL片段的唯一标识符。在需要引用该SQL片段的地方,可以使用标签进行引用。...复杂的SQL片段在定义SQL片段时,可以包含比较复杂的SQL语句,例如子查询、联表查询等。在引用时,可以根据需要添加不同的参数或条件进行动态调整。...我们定义了一个SQL片段latestOrder,使用了子查询和联表查询的语法,查询每个用户的最新一条订单信息。...在标签中,我们使用标签判断是否需要包含最新订单的查询条件,并使用标签引用SQL片段。
可以命名标识符的字符比常规的语言多,但特别建议只用:字母数字和下划线,并不用数字开头。...非常规字符或系统关键字虽然可以作为标识符使用,但最好要包在反引号(数字1左边那个反撇 ` )中,并且不推荐。...类规范 使⽤预编译语句,只传参数,比传递SQL语句更高效,降低SQL注用概率 充分利用前缀索引 尽量不使用存储过程、触发器、函数等,让数据库做最擅长的事 避免使用大表的JOIN,MySQL...、DELETE语句不使用LIMIT ,容易造成主从不一致 使用in代替or,in的值不超过1000个 禁止使用order by rand() sql语句避免使用临时表 使用union...TEXT/BLOB列 通常情况下,子查询的性能比较差,建议改造成JOIN写法 多表联接查询时,关联字段类型尽量一致,并且都要有索引 多表连接查询时,把结果集小的表(注意,这里是指过滤后的结果集
影响:mysql内存使用率达72.80,MySQL的cpu使用率达99.85 4条慢sql查询响应时间达229.428秒左右 2.2 识别慢查询 通过运维导出的excel表发现慢sql。...3.慢sql问题归纳 问题一:四张表进行连表数据量大,连表查询导致耗时长。颗粒标签表达一千多万条,颗粒表100多w,资源表200多w。 问题二:模糊查询导致索引失效,没有命中索引。...,显示查询中每个子查询的唯一标识符。...如果查询包含子查询,每个子查询都会有一个唯一的 ID。同一个查询的不同部分使用相同的 ID。...DERIVED:派生表,使用了子查询的结果。 UNION:UNION 中第二个 SELECT 开始的查询。 UNION RESULT:UNION 的结果。 table:显示与查询相关的表名。
不遵循范式要求,去掉完整性约束,减少表之间的依赖 3)弹性可扩展 可在系统运行的过程中,动态的删除和增加节点 4)多副本异步复制 数据快速写入一个节点,其余节点通过读取写入的日志来 实现异步复制...3)关键字,MySQL的关键字众多,不同版本的MySQL语言关键字也略有变化。所有关键字有自己特有的含义,应尽量避免作为标识符。 使用算术运算符进行加减乘除、求余运算。...基本查询语句 select语句是SQL语句从数据库中获取信息的一个基本语句,可实现从一个或多个数据库中的一个或多个表中查询信息,并返回结果集。...使用order by子句对结果集排序 在score表中查询期末成绩高于90分的学生学号、课程号和期末成绩,并先按课程号的升序、再按期末成绩的降序排列 使用group by子句 使用group...where子句中的子查询:1、带比较运算符的字查询 查询期末成绩比选修该课程平均期末成绩低的学生的学号、课程号和期末成绩 where子句中的子查询:带in关键字的子查询 查询期末成绩高于90分的学生的学号
具体可以EXPLAIN该SQL进行分析。 建议: 1.使用左外连接(LEFT OUTER JOIN)代替子查询。...3.UNION使用 如果希望UNION的各个子句能根据LIMIT只取部分结果集,或者希望能够先排好序再合并结果集的话。...以下使用会使索引失效,应避免使用 •使用 、not in 、not exist、!...: •id: SELECT 查询的标识符....•table: 查询的是哪个表•partitions: 匹配的分区•type: join 类型•possible_keys: 此次查询中可能选用的索引•key: 此次查询中确切使用到的索引.
2. explain 与优化器优化 遇到 SQL 执行超时,大部分原因是查询造成了扫描行数过多的问题,所以我们首先来判断是否是这个原因造成的。...PRIMARY primary 表示在存在子查询或 union 查询的语句中最外层的查询,他被称为“首要表”,通常他的 id 要小于统一查询中的子查询与 union 查询,表示他最后被执行。...DERIVED 表示该查询是在首要表 from 列表中包含的子查询,DERIVED 表示这是一个针对临时表的查询。 3.2.4....SUBQUERY subquery 表示在 select 的结果字段列表或 where 条件中包含的子查询。 3.2.5. UNION union 表示一个 union 查询的子查询。 3.2.6....3.3. table explain 结果集中,table 字段表示该查询所使用的表。 这个字段的值可能是表名、表的别名,在存在派生表、子查询或 union 查询的场景下则是临时表的标识符。
按表条件过滤后,留存的记录数的百分比 Extra 附加信息 下面我们来看下执行计划中部分重要列详解: id: SELECT 标识符。...PRIMARY:查询中如果包含子查询或其他部分,外层的 SELECT 将被标记为 PRIMARY。 SUBQUERY:子查询中的第一个 SELECT。...const:表中最多只有一行匹配的记录,一次查询就可以找到,常用于使用主键或唯一索引的所有字段作为查询条件。 eq_ref:当连表查询时,前一张表的行在当前这张表中只有一行与之对应。...index_merge:当查询条件使用了多个索引时,表示开启了 Index Merge 优化,此时执行计划中的 key 列列出了使用到的索引。...range:对索引列进行范围查询,执行计划中的 key 列表示哪个索引被使用了。 index:查询遍历了整棵索引树,与 ALL 类似,只不过扫描的是索引,而索引一般在内存中,速度更快。
CTESubstitution Substitution fixedPoint 根据以下条件,使用节点进行分析,并用CTE参考或CTE定义替换子计划:1.如果处于传统模式,或者如果查询是SQL命令或DML...为了避免重复的外部函数查找,外部函数标识符将存储在本地哈希集externalFunctionNameSet中。...语句中的多部分标识符解析catalog,如果解析的catalog不是session catalog,则将语句转换为相应的v2命令。...2.解析lambda函数的函数表达式树中使用的lambda变量。请注意,我们允许使用当前lambda之外的变量,这可以是在外部范围中定义的lambda函数,也可以是由计划的子级生成的属性。...UpdateOuterReferences Subquery Once 推送引用外部查询块的子查询中的聚合表达式下到外部查询块进行评估。
执行后,结果如下: 这里介绍下每个字段以及每个字段的含义: id id是执行计划的标识符,是SELECT 查询的序号。...PRIMARY 最外层select,包含子查询的时候,最外层的查询 UNION 在一个UNION查询中,第二次或以后的子查询操作 DEPENDENT UNION 在一个UNION查询中,第二次子查询或以后的...无法缓存结果的子查询,必须为外部查询的每一行重新计算 UNCACHEABLE UNION UNION中的第二个或以后的不可缓存的子查询。 ...应该避免 possible_keys 可能使用的key,指出当前查询涉及到的行都含有那些索引。如果有索引就会列出,但是不一定会被使用。 key 实际使用的索引。...Using MRR 使用多范围读取优化策略读取表。 Using temporary 使用临时表,MySQL需要创建一个临时表来保存结果。
它用于在这些情况下支持使用ORDER BY子句,满足在子查询或CREATE VIEW中使用的查询中ORDER BY子句必须与TOP子句配对的要求。 TOP ALL不限制返回的行数。...对查询结果使用ORDER BY子句。 子查询(例如UNION语句)中的ORDER BY子句必须与TOP子句配对。 如果没有指定ORDER BY子句,则返回记录的顺序是不可预测的。...在更复杂的查询中,SELECT可以检索列、聚合和非列数据,可以使用连接从多个表检索数据,也可以使用视图检索数据。 SELECT还可以用于从SQL函数、宿主变量或字面量返回值。...作为CREATE VIEW的一部分,定义视图可用的数据。 作为嵌入式SQL中使用的DECLARE CURSOR的一部分。 作为带有SELECT的INSERT的一部分。...这使用户能够分析/检查应用程序中的特定问题SQL语句,而不必为未被调查的SQL语句收集无关的统计信息。 %PROFILE为主查询模块收集SQLStats。
关于sql解析的一些概述: 因为最近在研究如何将oracle的sql语句迁移到hive上去,前期是准备写一些udf函数去弥补hive缺失oracle函数的遗憾, 其次会使用python开始开发一套轮子去实现转换...目前的整体架构和一般的sql解析引擎无异,有如下几个部分: Catalog:这部分相当于字典表,使用了pyhs2去检查hive是否存在这张表,后续的话,应该也会利用pyhs2直接建表。...一个子节点 二元节点:主要是Except(也就是类似于not in),Intersect(也就是join,这里目测实现难度会最大),两个子节点 parser的设计: 对于传入的语句将...对sql语句进行拆分,会使用stack的结构,处理子查询。 DDL的解析:对create和table进行匹配,create table设为DDL标识符。...sql_parser:会对里面的函数进行匹配,使用字典的形式去匹配,赋值相应的标识符。将相应的字段名,处理到keyword的执行计划中,放入树中。
20多份简历,大部分都是应届一年两年的,新鲜血液越来越多,我们也要不断的提升自己才能够不被挤下去,大家可以看下各大网站的java岗位3年以上的招聘需求: ?...>> 大部分java开发岗位都会有写到数据库相关,会把sql优化作为一个重要的岗位要求之一,由此可见sql优化的重要性。...各列的含义如下: id: SELECT 查询的标识符 select_type: SELECT 查询的类型. simple:进行不需要Union操作或不含子查询的简单select查询时,响应查询语句的select_type...SUBQUERY:子查询中第一个select DEPENDENT SUBQUERY:子查询中的第一个 SELECT, 取决于外面的查询....结语 今天moon和大家聊了在sql优化中expalin该去怎么使用,每个字段的意义,也和大家简单的聊了下语句的优化方案,当然,这只是sql优化的第一步而已,在很多复杂语句的优化上要考虑很多因素
领取专属 10元无门槛券
手把手带您无忧上云