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

Cấu trúc bảng cho Dữ liệu không gian địa lý

Lưu trữ nó ở dạng kiểu dữ liệu hình học . MySQL hỗ trợ Geometry (chung), cũng như các kiểu dữ liệu Point, Linestring và Polygon, hãy xem tạo kiểu dữ liệu không gian . Một giá trị kinh độ hoặc vĩ độ không thể tự nó là một hình học, như bạn có nó trong ảnh chụp màn hình của mình.

Nếu bạn sử dụng các loại hình học, nó mang lại cho bạn hai lợi thế so với việc có các trường kinh độ và vĩ độ riêng biệt:bạn có thể thêm chỉ mục không gian và bạn sẽ có thể sử dụng một số không gian của MySQL chức năng của nhà điều hành chẳng hạn như ST_Buffer, ST_Intersects, ST_Distance để phân tích thêm. Chỉ mục không gian dựa trên cây R và sẽ hoạt động tốt hơn nhiều so với hai chỉ mục cây B trên các cột không gian, vĩ độ và kinh độ - và sự khác biệt về hiệu suất này sẽ tăng lên khi kích thước bảng của bạn tăng lên.

Bạn vẫn có thể lấy lại các giá trị kinh độ và vĩ độ bằng cách sử dụng Hàm điểm X và Y vì vậy bạn sẽ không mất bất cứ thứ gì bằng cách lưu trữ dữ liệu của mình dưới dạng Điểm.

Nếu bạn đã có dữ liệu của mình trong hai cột vĩ độ / kinh độ riêng biệt và bạn muốn đi theo tuyến kiểu dữ liệu hình học / điểm, bạn có thể sử dụng hàm Điểm để tạo kiểu dữ liệu Điểm:

alter table mytable add column pt POINT;
update mytable set pt=Point(longitude, latitude);
alter table mytable modify pt POINT NOT NULL;
create spatial index ix_spatial_mytable_pt ON mytable(pt);

Lưu ý rằng hàm Point chỉ được giới thiệu trong MySQL 5.1.x (nó không được ghi chép quá đầy đủ, vì vậy tôi không chắc về phiên bản chính xác) và trước đó bạn phải sử dụng concat với hàm GeomFromText, hãy xem Di chuyển cột văn bản vĩ độ / kinh độ vào một cột loại 'point' để biết thêm thông tin về vấn đề này, mặc dù lưu ý rằng câu trả lời của Quassnoi có lon và lat sai vòng - đó là Point (lon, lat) chứ không phải theo chiều ngược lại, mặc dù đây là một lỗi rất phổ biến.

LƯU Ý: Cho đến gần đây, bạn chỉ có thể lập chỉ mục một cột không gian nếu sử dụng công cụ MyISAM.

CHỈNH SỬA: Trong bản phát hành sắp tới, MySQL 5.7 .5 , InnoDB cuối cùng sẽ hỗ trợ các chỉ mục trên các kiểu dữ liệu không gian (và không chỉ lưu trữ các kiểu không gian mà không có chỉ mục, điều này ít hữu ích hơn đáng kể). Điều này có nghĩa là bạn có thể có khóa ngoại, đảm bảo ACID, chỉ mục không gian, tất cả trong một công cụ, đã lâu lắm rồi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python Mysql, các lệnh không đồng bộ; bạn không thể chạy lệnh này bây giờ

  2. Lệnh MySQL:Cheat Sheet của các truy vấn MySQL phổ biến

  3. MySQL Backup:Tôi có thể sao chép các tệp bảng MyISAM riêng lẻ sang một máy chủ khác với phiên bản MySQL khác và hệ điều hành khác không?

  4. Chọn nếu tồn tại khác chèn?

  5. Làm thế nào để tạo trình khởi tạo để tạo và di chuyển cơ sở dữ liệu mysql?