另外提一点,对于大部分聚合函数,参数的类型和返回结果的类型一般是不同的,所以在展开聚合函数的时候一般会在参数列上构造 cast 函数做类型转换,展开后的表达式会保存在作为替换 LogicalAggregation...TiDB 会在 expressionRewriter 的逻辑中做两类操作: 子查询展开 即直接执行子查询获得结果,再利用这个结果改写原本包含子查询的表达式;比如上述的非相关子查询,如果其返回的结果为一行记录...LogicalApply 算子是一类特殊的 LogicalJoin ,特殊之处体现在执行逻辑上:对于 outer plan 返回的每一行记录,取出相关列的具体值传递给子查询,再执行根据子查询生成的 inner...当 `t1.pk` 满足唯一性后,每一行 outer plan 的记录都对应连接结果中的一个分组,所以其聚合结果会和在子查询中的聚合结果一致,这也解释了为什么聚合提升后需要按照 `t1.pk` 做分组。...这是为了在子查询中没有匹配的特殊情况下保证结果的正确性,以上面查询为例,当 `t2` 表没有任何记录满足 `t2.a = t1.pk` 时,子查询中不管是什么聚合函数都会返回 `null` 结果,为了保留这种特殊情况
子查询又分为相关和不相关子查询,如果子查询过滤条件里有外层查询的参数,则是相关子查询,反之则是不相关子查询。...key3 = s2.key3 LIMIT 1); 这种相关子查询也和我们前面想的一样: 外层获取一条记录,用于s2.key3的值。...写入的临时表而且会通过唯一索引去重,如果超过了tmp_table_size则会创建物理磁盘的临时表,索引类型也会变为b+树索引。...Table pullout(子查询中的表上拉) 当子查询的查询列表处只有主键和唯一索引的时候,直接上拉转换一下就好, SELECT * FROM s1 WHERE key2 IN (SELECT...aa,aa,aa,ab,ab,ab,bb,bb,bb,只需要在s1表中s1.key3 = ‘aa’,只需要取相同值第一个值的记录放入结果集,这种取值方式就是松散扫描。
(虽然没查,但怎么知道有多少数据呢,别忘了我们在查询之前计算成本会用到数据统计,但innoDB查询出来的不准确,是估值,所以这里一条只使用memory和myISAM) 使用主键等值匹配或者唯一二级索引等值匹配查询表...按返回的结果集区分子查询 因为子查询本身也是查询,可以吧子查询返回的不同数据分为不同的子查询类型。...IN (SELECT m2, n2 FROM t2); 按照外层关系来区分子查询 不相关子查询:如果子查询结果不依赖外层查询的值,就叫不相关子查询。...我们前面的都是不相关子查询。 相关子查询:如果依赖外层查询的值,就叫相关子查询。...FROM t1 WHERE EXISTS (SELECT 1 FROM t2); 对于子查询来说,我们并不关系子查询返回的结果集,我们关系的是子查询结果集是否存在记录,只要子查询有记录,那么整个表达式就是
number_of_subquery_evaluations 表示子查询的执行次数,因为对于主查询中满足 city_id < 100 的每一条记录,相关子查询都要执行一次,所以,这个字段值等于 parent_fanouts.fanout...其中 0.1 是从主查询中读取一条记录之后,拿到 city_id 字段值,去临时表中查询记录的成本常数,可以通过以下 SQL 获取: SELECT cost_name, cost_value, default_value...8 如果执行子查询查到了记录,说明主查询记录满足 city_id < 100 和 EXISTS 子查询两个条件,把主查询记录返回给客户端,否则,回到步骤 1。...总结 本文主要介绍了以下内容: 不相关子查询转换为相关子查询之后,explain 结果中: 子查询 type 列的值 unique_subquery 是 eq_ref 的别名;index_subquery...子查询 ref 列的值会显示为 func,这是因为主查询 IN 条件字段和子查询 select 子句字段组成的新条件中,IN 条件字段引用了主查询表中的字段,而不是直接使用主查询表中的字段。
定义:主键–唯一标识一条记录,不能有重复的,不允许为空 外键–表的外键是另一表的主键,外键可以有重复的,可以是空值 索引–该字段没有重复值,但可以有一个空值 作用:主键–用来保证数据完整性 外键–用来和其他表建立联系用的...(1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 (2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。...因此非相关子查询比相关子查询效率高 char 和 varchar 的区别? char 是一种固定长度的类型,varchar 则是一种可变长度的类型。...区别: char (M) 类型的数据列里,每个值都占用 M 个字节,如果某个长度小于 M,MySQL 就会在它的右边用空格字符补足。(在检索操作中那些填补出来的空格字符将被去掉)。...varchar (M) 类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为 L+1 字节)。 Mysql 的存储引擎,myisam 和 innodb 的区别。
相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS 的子查询就是相关子查询。...EXISTS表示存在量词:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。...相关子查询执行过程:先在外层查询中取“学生表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中。...然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止。 Exists:若子查询的结果集非空时,返回“True”;若子查询的结果集为空时,返回“False” 。...NOT EXISTS :若子查询结果为空,返回“TRUE”值;若子查询的结果集非空时,返回 “FALSE。 嘿嘿嘿好理解多了吧!!!!!!!
子查询的记录都写入临时表之后,从主查询记录中拿到 sub_field 字段值,去临时表中查找,如果找到了记录,sub_field 字段条件结果为 true,否则为 false。...主查询的所有 where 条件都判断完成之后,如果每个 where 条件都成立,记录就会返回给客户端,否则继续读取下一条记录。...使用临时表存放子查询的结果,是为了提升整个 SQL 的执行效率。如果临时表中的记录数量很多,根据主查询字段值去临时表中查找记录的成本就会比较高。...所以,MySQL 还会为临时表中的字段创建索引,索引的作用有两个: 提升查询临时表的效率。 保证临时表中记录的唯一性,也就是说创建的索引是唯一索引。...由上所述,总结一下 MySQL 的优化逻辑: 对于包含子查询的 where 条件字段,如果连续几条记录的字段值都相同,这组记录中,只有第一条记录会根据 where 条件字段值去临时表中查找是否有对应记录
主键、外键和索引的区别 定义: 主键–唯一标识一条记录,不能有重复的,不允许为空 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引–该字段没有重复值,但可以有一个空值...(1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 (2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。...因此非相关子查询比相关子查询效率高 15.char和varchar的区别? char是一种固定长度的类型,varchar则是一种可变长度的类型。...区别: char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。(在检索操作中那些填补出来的空格字符将被去掉)。...varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。 16.Mysql 的存储引擎,myisam和innodb的区别。
key2 ; 连接查询的执行计划中,出现在前边的表表示驱动表,出现在后边的表表示被驱动表 ---- id 查询语句中每出现一个SELECT关键字,设计MySQL的大叔就会为它分配一个唯一的id值...对于包含子查询的查询语句来说,就可能涉及多个SELECT关键字,所以在包含子查询的查询语句的执行计划中,每个SELECT关键字都会对应一个唯一的id值: explain select * from s1...临时表也是表,只要为表中记录的所有列建立主键或者唯一索引就好了 跟UNION对比起来,UNION ALL就不需要为最终的结果集进行去重,它只是单纯的把多个查询的结果集中的记录合并成一个并返回给用户,所以也就不需要使用临时表...如果子查询不依赖外层查询的值,那么该子查询为不相关子查询,否则为相关子查询。...类似,只不过访问子查询中的表时使用的是普通的索引 这里针对的是子查询返回的列是唯一索引还是普通索引 range : 如果使用索引获取某些范围区间的记录,那么就可能使用到range访问方法 index
18.所有不同类型的索引是什么? 索引有三种类型 1.唯一索引:唯一索引通过确保表中没有两行数据具有相同的键值来帮助维护数据完整性。定义主键时,可以自动应用唯一索引。...数据库查询可以是选择查询或动作查询。 24.什么是子查询? 子查询是另一个查询中的SQL查询。它是Select语句的子集, 其返回值用于过滤主查询的条件。 25.子查询的类型是什么?...子查询有两种类型: 1.关联的:在SQL数据库查询中,关联的子查询是使用外部查询中的值来完成的子查询。因为相关子查询要求首先执行外部查询,所以相关子查询必须为外部查询中的每一行运行一次。...临时表是用于临时存储数据的临时存储结构。 30.如何避免查询中重复记录? SQL SELECT DISTINCT查询仅用于返回唯一值。它消除了所有重复的值。...让我们看一下重要的SQL查询以进行面试 76.如何从表中获取唯一记录?
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。...主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。...SQL语句中‘相关子查询’与‘非相关子查询’有什么区别? 答:子查询:嵌套在其他查询中的查询称之。 子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。...所有的子查询可以分为两类,即相关子查询和非相关子查询 (1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。...(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
大家好,又见面了,我是你们的朋友全栈君。 1.简介 不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。...相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS 的子查询就是相关子查询 EXISTS表示存在量词:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True...:先在外层查询中取“学生表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中。...然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止。 EXISTS语句不关心子查询的具体内容,因此用“SELECT *”,“Exists + 子查询”用来判断该子查询是否返回记录。...NOT EXISTS :若子查询结果为空,返回“TRUE”值;若子查询的结果集非空时,返回 “FALSE。
大家好,又见面了,我是你们的朋友全栈君。 1、简介 不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询 相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询。...带Exists的子查询就是相关子查询 Exists表示存在量词:带有Exists的子查询不返回任何记录的数据,只返回逻辑值“True”或“False” 2、表结构 选课表:学号StudentNo、课程号...:先在外层查询中取“学生表”的第一行记录,利用该记录的相关属性值(在exists子查询的where子句中用到的列)处理内层查询,若外层的where子句返回“true”,则本条记录放入结果表中。...然后再取下一行记录,重复上述过程直到外层表遍历完毕。 Exists语句不关心子查询返回的具体内容,因此用“exists(select 1 from)”来判断子查询是否返回记录。...exists()值为true,说明选课表中找不到“S1.StudentNo + C1.CourseNo”这一记录,说明学生S1没有选课程C1,此时内层查询的返回结果集会加上C1,当内层查询的返回结果集不为空时
关键字(key):能唯一标识文件中每条记录的字段或字段集,称为记录的关键字,或者简称为键。...审计功能是一种监视措施,它把用户对数据库的所有操作自动记录下来,存入审计日志中 记录的内容一般包括:操作类型(查询、插入、更新、删除),操作终端标识与操作者标识,操作日期和时间,操作所涉及的相关数据,...2、不相关子查询:不相关子查询的处理一次完成,执行后传递给外部查询。 二、依赖不同 1、相关子查询:相关子查询中的查询条件取决于外部查询中的值。...2、不相关子查询:无关子查询是独立于外部查询的子查询,不依赖于外部查询中的值。 三、效率不同 1、相关子查询:相关子查询可以嵌套在多个层中,但嵌套层越多,效率越低。...如果记录中操作是插入操作,则对其执行删除操作;如果记录中操作是删除操作,则对其执行插入操作;如果记录中操作是修改操作,则用修改前的值代替修改后的值。
搜索API是一个灵活、功能强大的工具,但它确实有两个限制必须解决:不支持正则表达式并对调用率和结果计数设置限制。查询搜索API需要两个参数:查询字符串和排序类型。...这些查询在附录的表V中显示。对于sort类型参数,总是使用sort=indexed返回最近索引的结果,以确保收到实时结果。...从这些结果中排除了.gitignore文件,因为它们很少包含秘密,但占搜索结果的很大比例。对于每个查询,API都返回一组文件及其元数据。然后对API的内容端点执行另一个请求,以获取文件的内容。...在收集方法的每个步骤中详细描述了文件的数量,最终得到发现的唯一秘密的总数。在这里将“唯一”秘密称为在数据集中至少出现一次的秘密;请注意,唯一秘密可能出现多次。 GitHub搜索API。...在2018年4月4日对单个GitHub每周BigQuery快照执行了查询,能够扫描3374973仓库中2312763353个文件的内容(第1B阶段)。
Const效率是最块的,成本可以忽略不计,主要通过主键或者唯一值查询的sql。...Ref代表用的是索引b+tree查询的时候,比如用连接查询的时候,连接查询的条件是索引唯一值,这时候还分为eq-ref,er-ef是当被驱动表查询的是主键或者唯一二级索引的时候,这时候就是显示eq-ref...以及还有相关子查询union和不相关子查询。还有from后面连接select的派生查询,derived。当吧子查询物化后,子查询在与外部链接,这时候就是物化查询。...当union联合查询的时候,这种是表示驱动表的扇出值,被驱动表满足百分之10的数据,和rows组合可以计算出扇出值。...Extra顾名思义,记录额外数据的地方,比如sql里面没有写表,会显示no table,当有函数max,min的时候也会显示,当覆盖索引的时候,显示useing index。
(数据类型错误,key键的是否唯一,数据的取值是否在规定的范围内等) 3.学会用外部键处理数据。 三、【实验过程】 一、数据类型错误,key不是唯一,或数据超过规定的长度:都是常见的数据库错误。...因此这个数据类型的字段能够存放这条记录最后被修改的时间,而不是真正来的存放时间。...定点数(decimal): decimal(m,d) 定点类型,浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。...:不相关子查询(干完就跑路)、相关子查询(交错互通,内层查询都要看一下外层查询,外层查询都要看一下内层查询) #不相关子查询(干完就跑路)in(…) #一个值 ‘=’;多个值 ‘in’或’=ANY’ #...它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。
使用BigQuery数据存储区,您可以将每条记录放入每个包含日期/时间戳的BigQuery表中。...这实际上是Dremel和BigQuery擅长的,因为它为您提供了SQL功能,例如子选择(功能),这些功能在NoSQL类型的存储引擎中通常找不到。...您的ETL引擎通常必须注意何时去插入新的事实或时间维度记录,并且通常包括“终止”记录历史记录集谱系中当前记录的前一个记录。...这使得存储在BigQuery中的FCD模式模型与用于管理时间维度的SCD模型变得相同,但是存在一个问题。ETL过程必须维护BigQuery端存在记录的“Staging DW”。...这种FCD的总体方法对于建模ERP类型的数据来说非常有用,例如,在记录有生效和终止日期(effective and termination)的情况下,以及追踪变化至关重要的情况下。
子查询 在嵌套查询中,最外面查询结果集返回给调用方,称为外部查询。嵌套在外部查询内的查询称为子查询,子查询的结果集供外部查询使用。 根据是否依赖外部查询,可将子查询分为自包含子查询和相关子查询。...自包含子查询不依赖外部查询,相关子查询则依赖外部查询。 子查询结果是在运行时计算的,查询结果会跟随查询表的变化而改变。子查询可以返回单个值(标量)、多个值或者整个表结果。...dbo.Customers AS C ORDER BY C.custid ); 上述查询语句看起来可以正常运行,但当子查询的返回结果集中包含NULL值时,上述查询语句则不会返回任何数据。...子查询中很有可能无意中包含了外部查询的列名导致子查询有自包含子查询变为相关子查询而引发逻辑错误。 为避免上述错误,查询中的列名尽可能使用完全限定名:[表名].[列名]。...所有列必须显式指定名称 所有列名必须唯一 表表达式分为:派生表、公用表表达式、视图三种类型。其中,派生表与公用表表达式只适用于单语句范围,即,只存在于当前查询语句中。视图则可以被多条查询语句复用。
领取专属 10元无门槛券
手把手带您无忧上云