我有一个companys表和一个Zipcodes表,我想在应用其他处理之前获得companyid的最新子集。所以我经常把它放在一个内部选择中,在某些WHERE条件下获取companyid,然后在外部进行一些聚合或计算(比如距离计算)。
出于某种原因,我不明白为什么外部选择速度慢,而内部查询速度快。
我知道这和里面的连接有关。因为移除它可以解决问题。不知怎么的,MySQL正在派生表。。。SELECT _i1.companyID FROM ( SELECT companyID FROM Companies JOIN Zipcodes ON Zipcodes.zipcode = Companies.companyZipcode WHERE Companies.companyType = 'plumbing') _i1
时间:.8s
没有外部查询:.00x秒
有关于Zipcodes.zipcode
和Companies.companyZipcode
的指标,Companies.companyType
和Companies.companyID
是主要的关键。
做一个解释说明外部查询会导致MySQL有一个select_类型的派生而不是Simple。
最佳答案
当有子查询时,需要创建一个临时表并将数据插入其中。
关于php - 了解为什么此MySQL外部选择会减慢查询速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27429271/