2018年(273)
分类: Mysql/postgreSQL
2018-08-03 13:45:33
MySQL 里面有哪些子查询呢?
格式:select ..... from outer_tables where expr in (select .... from inner_tables ...) and ...
为什么要用semi join来进行优化子查询?
MySQL又是需要满足什么条件才会转换成semi jion?
有哪些因为可以将半连接和常规连接进行区分?
那么我们了解了为什么有semi jion,满足什么条件转换成semi join以及如何区分,那对于semi jion 又有哪些优化策略呢?
--因为半连接是一种常规连接操作,并结合从半连接内部表中删除可能的重复项。
MySQL实现了四种不同的半连接执行策略,它们有不同的删除重复项的方法:
当扫描inner table 来组合数据时,并且有多个符合条件的数据时,只选择第一条满足条件的记录,连接后的结果,存与临时表。
EG:
select * from country
where country.code in ( select city.CountryCode from city
where city.Population >1*1000*1000)
and Country.Continent='Europe';
由于Germany有两个大城市(在该图中),它将被放入查询输出两次。 这是不正确的,SELECT ... FROM Country不应该产生两次相同的国家记录。 FirstMatch策略避免了一旦找到第一次真正的匹配就通过快速执行生成重复项: