gpt4 book ai didi

MySQL先做哪一个——过滤WHERE条件还是计算字段?

转载 作者:行者123 更新时间:2023-11-29 03:05:37 30 4
gpt4 key购买 nike

在执行MySQL查询时,是否所有数据都经过WHERE条件过滤后才计算任何字段?

我有一个应用程序,我需要按距离排序但需要在查询中计算出与 lat/lng 的距离(found this which should cover that part of it(第 8 页)),但它提到查询速度相当慢。我想知道 MySQL 是否会计算每个数据库条目的距离,然后过滤这些结果,或者是否会先过滤结果?

编辑:

我没有说得很清楚——我只需要在这个阶段对结果进行排序。按距离过滤也不错,但这总是次要于其他标准 - 即在它与坐标的接近程度之前,类型总是需要是酒店

最佳答案

WHERE 直接作用于行,这也是你不能在 WHERE 子句中指定列别名的原因。这会导致未知的列错误。

您可以使用 HAVING 或子查询。在这两种情况下,都会计算所有行的结果,然后进行过滤。

更新:

你必须按距离过滤,对吧?所以你不能先过滤行,然后计算距离。但是您可以做的是使用空间扩展。然后你会有空间索引,它可以使你的查询非常快,我猜(从来没有与这样的事情有任何关系)。

阅读更多相关信息 here .

更新 2:

其实我根本不明白你的问题是什么。你想按你必须先计算的东西来订购。那么问题是什么?会很快吗?我不知道。我只能说,不能使用索引,因为 MySQL 不支持计算列上的索引。可能还会使用一个临时表来对您获得的任何数据进行排序,这取决于它有多少数据。我建议尝试一下

就这样

SELECT coordA, coordB
FROM whereever
ORDER BY coordA - coordB

就是这样。当你遇到问题时,再问一次。

稍后过滤

SELECT * FROM (
SELECT coordA, coordB, coordA - coordB AS distance
FROM whereever
ORDER BY distance
) sq
WHERE distance > $foo

如果速度太慢,请使用索引和/或前面提到的扩展。

关于MySQL先做哪一个——过滤WHERE条件还是计算字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16015095/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com