Diese Abfrage sollte mir das am nächsten kommende Element zu einem gegebenen :x
, :y
in kartesischen Koordinaten geben.Wie konnte diese Abfrage in Bezug auf die Ausführungsgeschwindigkeit optimiert werden
SELECT `type`
FROM `mapgen_centers`
ORDER BY SQRT(POW((:x - `x`), 2) + POW((:y - `y`), 2))
LIMIT 1
Es dauert zur Zeit 0,002S im Durchschnitt, die in Ordnung ist, aber ich habe das Gefühl, das kann besser sein, vor allem, weil ich es zur Zeit sehr Feuer, sehr oft und häufig, so dass die gesamte Ausführung der Skripts Pfähle von einigen Minuten.
Can (und wenn ja, wie) diese durch irgendein Mittel auf einer Standard-MySQL-Installation (Prozeduren, Funktionen, Indizes, Konfiguration, ...)
können Sie eine Spalte mit dem Ergebnis der Formel hinzufügen: 'SQRT (POW ((: x - x), 2) + POW ((: y - y), 2)) 'und addiere einen Index darauf – Stephan
Aber': x', ': y' ändern sich mit jeder Ausführung? Wie kann ich eine Spalte mit dieser Formel erstellen, wenn die Werte vorher nicht bekannt sind? –
Müssen Sie wirklich 'SQRT' verwenden, da es nur zum Sortieren verwendet wird? Ist es nicht so, dass, wenn (x'-x)^2 + (y'-y)^2 höher wird, seine Quadratwurzel auch höher wird? – iCantSeeSharp