Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich die Haversine-Formel in MySQL beschleunigen?

warum Sie HABEN ... aufgrund der Tatsache, dass Ihre Abfrage keine aggregierte Funktion verwendet, sodass Sie uing wo filtern können (aber wo Sie nicht verwenden, müssen Sie den Code wiederholen) und für die Leistung, wenn Sie where verwenden, vermeiden Sie einen vollständigen Scan, um die Ergebnis für die Auswertung

  $query = $mysqli->query("SELECT postcode, (
        6371 * acos (
        cos ( radians('$latitude') )
        * cos( radians( lat ) )
        * cos( radians( lng ) - radians('$longitude') )
        + sin ( radians('$latitude') )
        * sin( radians( lat ) )
      )
  ) AS distance
  FROM postcodetabel
  WHERE    6371 * acos (
        cos ( radians('$latitude') )
        * cos( radians( lat ) )
        * cos( radians( lng ) - radians('$longitude') )
        + sin ( radians('$latitude') )
        * sin( radians( lat ) ) )< 12
  ORDER BY distance ASC");