理解为什么这个MySQL外部选择会减慢查询速度

时间:2014-12-11 17:52:17

标签: php mysql sql subquery

我有一个公司表和一个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.zipcodeCompanies.companyZipcode以及Companies.companyTypeCompanies.companyID上的索引是主键。

执行EXPLAIN显示外部查询导致MySQL的select_type为Derived而不是Simple。

1 个答案:

答案 0 :(得分:0)

当您有子查询时,需要创建一个临时表并将数据插入其中。