2
第一个查询工作得很好。它从表'路线点'返回一行。它有一个特定的'route_id','geo_distance()'在给定参数时处于最小值。我知道FROM部分中的子查询似乎不必要的复杂,但在我看来,它有助于突出第二个查询的问题。MYSQL:如何正确使用子查询中的外部别名?
区别在最后两行。
SELECT rp.*
FROM routepoint rp, route r, (SELECT * FROM ride_offer WHERE id = 6) as ro
WHERE rp.route_id = r.id
AND r.id = ro.current_route_id
AND geo_distance(rp.lat,rp.lng,52372070,9735690) =
(SELECT MIN(geo_distance(lat,lng,52372070,9735690))
FROM routepoint rp1, ride_offer ro1
WHERE rp1.route_id = ro1.current_route_id AND ro1.id = 6);
下一个查询根本不起作用。它完全冻结MySQL,我必须重新启动。 我在做什么错?第一个子查询返回一行。我不明白区别。
SELECT rp.*
FROM routepoint rp, route r, (SELECT * FROM ride_offer WHERE id = 6) as ro
WHERE
rp.route_id = r.id
AND r.id = ro.current_route_id
AND geo_distance(rp.lat,rp.lng,52372070,9735690) =
(SELECT MIN(geo_distance(lat,lng,52372070,9735690))
FROM routepoint rp1
WHERE rp1.route_id = ro.current_route_id);
路线点表有多大?另外,您是否比较了两个陈述的执行计划? –
您正在尝试编写依赖子查询 - 子查询将在外部查询结果集的每一行执行一次,如果您有很多行,这将会非常慢 - 您会希望尽可能多地优化子查询尽你所能。 – Romain
@Klas路线点表有大约14k行,它会变得更大。 – Nielow