Benzer bir sql sorgusu gelistirmistim. databasede veri sayisi 10.000 sayisini gectikten sonra cok yavasladi. Cunku mesafe hesaplama fonksiyonu 10.000 data icin ayri ayri calismali, merkez noktasi da hep degistigi icin de mysql cache de bir anlam tasimiyor. ornegin bu verdigin sql sorgusunda istanbuldaki bir kisiye olan uzakligi almak istediginde erzurumdaki bir data icin de mesafe hesaplama formulu calisir. Bu da ekstra zaman kaybi. Data sayisi artinca performans cok kotu olacaktir ve performans kaybi katlanarak artacaktir.
Cozum olarak ilk basta sehir olarak filtreleyelim dedik. ornegin istanbul merkezli arama yapinca ilk once istanbuldaki datalari filtreleyip, sadece o datalarin mesafesini hesaplayalim dedik. Boylce baska sehirlerdeki datalara olan mesafeyi hesaplamamis olduk. Ama bu durumda da tuzladan(istanbul) biri arama yaptiginda gebzedeki(izmit) sonuclar cikmadi dogal olarak. Bu cozum mantikli degildi ve eledik.
Onun yerine en verimli cozum su oldu, ornegin latitude:45 longitude:75 olan bir yerin mesafesini hesaplaman icin sql de "where" blogunun icine su sekilde filtre eklersen
and latitude > 40.00
and latitude < 50.00
and longitude > 70.00
and longitude < 80.00
yani sadece tum dataya olan mesafeyi hesaplemk yerine belli bir kare alan icindekilerin mesafesini hesaplar isen cok daha hizli sonuc verecektir sql. biz bu sayede ABD icinde lokasyonlarin mesafe hesaplamasini sql optimizasyondan once 120 saniyede aldigimiz sonucu 6 saniye kadar dusurduk.
Hele bir de rotaya olan uzakligi hesaplamak istediginde bu formul de cok yeterli gelmeyecktir, bu durumda bunun gibi Route Boxer
js-tutorial.com ve bu tez gibi kaynaklara ihtiyac duyabilirsin
ieeexplore.ieee.org