MySQL 子查询优化[IN/EXISTS]

  • 时间:
  • 浏览:0
  • 来源:大发彩神安卓下载—大发彩神官方下载

当扫描inner table 来组合数据时,如可让有多个符合条件的数据时,只选取第两根满足条件的记录,连接后的结果,存与临时表。



如可让Germany有有3个大城市(在该图中),它将被装到 去查询输出两次。 这是不正确的,SELECT ... FROM Country不应该产生两次相同的国家记录。 FirstMatch策略处里了一旦找到第一次真正的匹配就通过快速执行生成重复项:

如可让真难 开启simi jion 的措施下运行:

这一 执行计划如可让读取到(239+239 * 18)=4541行数据,这一 会真难。

图片来源MariaDB官网

真难 大伙儿了解了为有哪些有semi jion,满足有哪些条件转加进semi join以及如可区分,那对于semi jion 又有有哪些优化策略呢?

--如可让半连接是四种 生活常规连接操作,并结合从半连接外部表中删除如可让的重复项。

MySQL实现了四种 生活不同的半连接执行策略,它们有不同的删除重复项的措施:

为有哪些要用semi join来进行优化子查询?

首先做inner join 操作:



外部连接产生重复项。 Germany有三次big city,此时将DuplicateWeedout策略进行应用:

该查询将读取City表中的237行,如可让它们中的每个都将在Country表中进行主键查找,从而得到另外237行。 这总共提供了474行,如可让您前要在临时表中加进237个查找。

真难 关闭semi join:

有有哪些如可让能够将半连接和常规连接进行区分?

先和子查询做简单的inner join 操作,并使用临时表(建有Primary key)来消除重复记录。

格式:select ..... from outer_tables where expr in (select .... from inner_tables ...) and ...

--另外四种 生活策略下次分享

MySQL 上方有有哪些子查询呢?

EG:

MySQL又是前要满足有哪些条件才会转加进semi jion?