Tidak, perhitungan tidak akan dilakukan dua kali jika ditulis dengan cara yang persis sama. Namun jika tujuan Anda adalah untuk meningkatkan kinerja aplikasi Anda, maka Anda mungkin ingin melihat gambaran yang lebih besar daripada berkonsentrasi pada detail kecil ini yang dapat memberi Anda paling banyak dua faktor perbedaan. Masalah yang lebih serius adalah kueri Anda mencegah penggunaan indeks yang efisien dan akan menghasilkan pemindaian penuh.
Saya sarankan Anda mengubah database Anda sehingga Anda menggunakan tipe geometri dan membuat indeks spasial pada data Anda. Kemudian Anda dapat menggunakan MBRWithin untuk segera menemukan titik-titik yang terletak di dalam kotak pembatas lingkaran Anda. Setelah Anda menemukan titik-titik itu, Anda dapat menjalankan tes jarak yang lebih mahal hanya pada titik-titik itu. Pendekatan ini akan jauh lebih cepat jika tabel Anda besar dan penelusuran biasa hanya mengembalikan sebagian kecil baris.
Jika model data tidak dapat diubah maka Anda masih dapat meningkatkan performa dengan menggunakan kotak pembatas terlebih dahulu, misalnya WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60
. Centang kotak pembatas akan dapat menggunakan indeks, tetapi karena indeks R-Tree hanya didukung pada jenis geometri, Anda harus menggunakan indeks B-Tree standar yang tidak seefisien untuk jenis kueri ini (tetapi masih banyak lebih baik dari apa yang Anda lakukan saat ini).