SQL Query for Performing Radius Search based on Latitude Longitude

前端 未结 4 868
天命终不由人
天命终不由人 2020-12-04 10:31

We have a restaurant table that has lat-long data for each row.

We need to write a query that performs a search to find all restaurants within the prov

4条回答
  •  攒了一身酷
    2020-12-04 11:07

    IS THERE ANYTHING WRONG With this query?

    In my opinion the WHERE clause is going to be slow because of the maths involved, and the use of functions in the WHERE clause will prevent the database using an index to speed the query - so, in effect, you will examine every restaurant in the database, and perform the great-circle maths on every row, every time you make a query.

    Personally I would calculate the TopLeft and BottomRight co-ordinates of a square (which only needs to be crudly calculated using pythagoras) with sides equal to the range you are looking for, and then perform the more complicated WHERE clause test on the smaller subset of records that are within that Lat/Long square.

    With an Index on Lat & Long in the database the query

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

    should be very efficient

    (Please note that I have no knowledge of MySQL specifically, only of MS SQL)

提交回复
热议问题