sql >> データベース >  >> RDS >> Mysql

緯度経度に基づいて半径検索を実行するためのSQLクエリ

    私の意見では、WHERE句は数学が関係しているため遅くなり、WHERE句で関数を使用すると、データベースがインデックスを使用してクエリを高速化できなくなります。したがって、実際には、データベースを作成し、クエリを実行するたびに、すべての行で大圏計算を実行します。

    個人的には、探している範囲に等しい辺を持つ正方形のTopLeft座標とBottomRight座標(ピタゴラスを使用して粗雑に計算する必要があるだけです)を計算してから、の小さいサブセットに対してより複雑なWHERE句テストを実行します。その緯度/経度の正方形内にあるレコード。

    データベースにLat&Longのインデックスがある場合、クエリ

    WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat
          AND MyLong >= @MinLong AND MyLong <= @MaxLong
    

    非常に効率的である必要があります

    (私はMySQLについては特に知識がなく、MS SQLについてのみ知識があることに注意してください)



    1. Oracle D2k、NoidaのPLSQLテクノロジーに取り組んでいるソフトウェア会社

    2. SQLiteのトラップと落とし穴

    3. mysql_insert_id()が正しい値を返すことを信頼できますか、マルチスレッドパラノイア

    4. mysqlエラー1442の本当の原因は何ですか?