Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn kết quả tìm kiếm dựa trên vị trí chậm

Bạn có thể sử dụng tiện ích mở rộng không gian mysql và lưu vĩ độ và kinh độ dưới dạng kiểu dữ liệu điểm và biến nó thành chỉ mục không gian. Bằng cách đó, bạn có thể sắp xếp lại thứ tự các tọa độ dọc theo một đường cong và giảm kích thước và bảo toàn thông tin không gian. Bạn có thể sử dụng chỉ mục không gian làm hộp giới hạn để lọc truy vấn và sau đó sử dụng công thức harvesine để chọn kết quả tối ưu. Hộp giới hạn của bạn phải lớn hơn bán kính của hình tròn lớn. Mysql sử dụng rtree với một số chỉ mục không gian và ví dụ của tôi là về đường cong z hoặc đường cong hilbert: https://softwareengineering.stackexchange.com/questions/113256/what-is-the-difference-between-btree-and-rtree-indexing Sau đó, bạn có thể chèn trực tiếp địa lý vào cột điểm: http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html . Hoặc bạn có thể sử dụng loại dữ liệu hình học: http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . Sau đó, bạn có thể sử dụng hàm MBRcontains như sau: http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html hoặc bất kỳ chức năng nào khác: http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Do đó, bạn cần một hộp giới hạn. Dưới đây là một số ví dụ:

Đây là một ví dụ đơn giản với kiểu dữ liệu điểm:

    CREATE SPATIAL INDEX sx_place_location ON place (location)

    SELECT  * FROM    mytable
    WHERE   MBRContains
           (
           LineString
                   (
                   Point($x - $radius, $y - $radius),
                   Point($x + $radius, $y + $radius)
                   )
           location
           )
    AND Distance(Point($x, $y), location) <= $radius

Tôi không chắc liệu nó có hoạt động hay không vì nó sử dụng biến bán kính với hàm hộp giới hạn. Đối với tôi MBRwithin có vẻ đơn giản hơn một chút, vì nó không cần bất kỳ đối số nào: Mysql:Tối ưu hóa việc tìm kiếm siêu nút trong cây tập hợp lồng nhau .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa việc sử dụng và bật trong phép nối bảng trong MySQL là gì?

  2. App Engine và MySQL

  3. Cơ sở dữ liệu bị lỗi trong nguồn dữ liệu Jboss

  4. xampp MySQL không khởi động

  5. Chuỗi tự động MySQL để ép kiểu số nguyên trong mệnh đề where?