Dự án của chúng tôi giữ cơ sở dữ liệu thế giới trong cấu trúc cây bên trong bảng INNODB của MySQL db. Trái đất là gốc, sau đó các quốc gia, sau đó là các vùng của quốc gia và các vị trí là lá.Làm thế nào để sử dụng các khóa ngoại và một chỉ mục không gian bên trong một bảng MySQL?
Khóa ngoài được sử dụng để cung cấp quyền truy cập nhanh vào trẻ em (ví dụ: các thành phố trong khu vực).
Bây giờ, chúng tôi muốn triển khai tìm kiếm địa lý nhanh trong cơ sở dữ liệu cho các tọa độ nhất định. Một giải pháp rõ ràng là sử dụng SPATIAL INDEX, đây là một tính năng của các bảng MyISAM. Nhưng bảng MyISAM không hỗ trợ khóa ngoài. Và các bảng INNODB không hỗ trợ INDAT SPATIAL.
Vì vậy, nếu chúng tôi sử dụng bảng MyISAM, chúng tôi phải từ bỏ khóa ngoại và điều đó sẽ khiến trẻ em tìm kiếm quá lâu.
Làm cách nào chúng ta có thể kết hợp tìm kiếm nhanh cho trẻ em trong cây và cũng có một chỉ số SPATIAL trong bảng?
Lưu ý rằng mục đích chính của nước ngoài không phải là tăng tốc truy vấn, nhưng để thực thi mối quan hệ giữa các bảng. Điều sẽ tăng tốc độ tra cứu là chỉ mục mà bạn sẽ tạo cùng với khóa ngoại. – Benjamin