我有一个公司表和一个Zipcodes表,我希望在应用其他处理之前获取最公司ID的samllest子集。所以我常常把它放在内部选择中,在某些WHERE条件下抓取companyID,然后在外面进行一些聚合或计算(比如可能是距离计算)。
出于某种原因,我不理解为什么这个外部SELECT很慢而内部查询速度很快。
我知道它与内部的JOIN有关。因为删除它可以解决问题。不知何故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
上的索引是主键。
执行EXPLAIN显示外部查询导致MySQL的select_type为Derived而不是Simple。
答案 0 :(得分:0)
当您有子查询时,需要创建一个临时表并将数据插入其中。