Không, phép tính sẽ không được thực hiện hai lần nếu nó được viết theo cùng một cách. Tuy nhiên, nếu mục đích của bạn là cải thiện hiệu suất của ứng dụng thì bạn có thể muốn nhìn vào bức tranh toàn cảnh hơn là tập trung vào chi tiết nhỏ này có thể mang lại cho bạn sự khác biệt nhiều nhất là hai yếu tố. Một vấn đề nghiêm trọng hơn là truy vấn của bạn ngăn cản việc sử dụng hiệu quả các chỉ mục và dẫn đến việc quét toàn bộ.
Tôi khuyên bạn nên thay đổi cơ sở dữ liệu của mình để sử dụng kiểu hình học và tạo chỉ mục không gian trên dữ liệu của bạn. Sau đó, bạn có thể sử dụng MBRWithin để nhanh chóng tìm thấy các điểm nằm bên trong hộp giới hạn của vòng tròn của bạn. Khi bạn đã tìm thấy những điểm đó, bạn chỉ có thể chạy bài kiểm tra khoảng cách đắt tiền hơn trên những điểm đó. Cách tiếp cận này sẽ nhanh hơn đáng kể nếu bảng của bạn lớn và một tìm kiếm thông thường chỉ trả về một phần nhỏ các hàng.
Nếu bạn không thể thay đổi mô hình dữ liệu thì trước tiên bạn vẫn có thể cải thiện hiệu suất bằng cách sử dụng hộp giới hạn, ví dụ:WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60
. Hộp kiểm tra hộp giới hạn sẽ có thể sử dụng một chỉ mục, nhưng vì các chỉ mục R-Tree chỉ được hỗ trợ trên kiểu hình học, bạn sẽ phải sử dụng chỉ mục B-Tree tiêu chuẩn không hiệu quả cho loại truy vấn này (nhưng vẫn còn nhiều tốt hơn những gì bạn đang làm).