MySQL Semi Join优化策略-FirstMatch strategy

8月 22, 2014 |

对于如下的SQL:

select * from Country

where Country.code IN (select City.Country

from City

where City.Population > 1*1000*1000)

and Country.continent='Europe'

假设我们想要查找拥有100万人口城市的欧洲国家,常规的inner join执行计划看起来像下面这样:

常规inner join

 

 

 

 

 

 

 

 

由于德国有两个大城市(在这个图中), 它将在查询输出中输出两次,这是不正确的。SELECT ... FROM Country不应该产生同一个国家两次,FirstMatch策略当发现第一个满足行发现后中止匹配来避免产生重复的输出,

FirstMatch策略

 

 

 

 

 

 

 

 

注意“中止”在“使用where”后应用的,如果我们发现候选后就执行中止时不正确的。

 

https://mariadb.com/kb/en/mariadb/mariadb-documentation/optimization-and-tuning/query-optimizations/optimization-strategies/firstmatch-strategy/

Posted in: MySQL practise | Tags: , ,

Comments are closed.