2011-06-16 15 views
6

Belirli bir noktaya ait bir yarıçap içinde puan almak için en verimli sorguyu çözmeye çalışıyorum. Sonuçların çok doğru olması gerekmez, bu yüzden doğruluk üzerinde hızı tercih ederim.sql server uzamsal bir nokta yarıçapı içinde puan almak için en verimli yol

Biz kullanılarak çalıştılar bir yerde (@point ve v.GeoPoint coğrafya türleri olduğu) böyle STDistance Noktalardan oluşan maddesi karşılaştırılması mesafe:

Bu benzer STIntersects kullanılarak

WHERE v.GeoPoint.STDistance(@point) <= @radius 
da

bir

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1 

Bu sorgulardan herhangi biri tercih ediliyor mu yoksa kaçırdığım başka bir işlev var mı?

cevap

3

doğruluk sonra iyi bir fikir olabilir Filtre işlevini kullanarak her şeyden değilse: http://msdn.microsoft.com/en-us/library/cc627367.aspx

sizin maç kesin olmadığını görmek için kontrol yapmak için bu i birçok durumda daha hızlı büyüklük siparişler olabilir . Dizinde, veriler bir ızgara düzeninde saklanır, bu nedenle bu yaklaşımın ne kadar uygulanabilir olduğu muhtemelen konumsal dizin seçeneklerine bağlıdır.

Ayrıca, birçok eşleşme yapmak zorunda kalmazsanız, önce bir filtre yapmak ve ardından tam bir kesişim yapmak uygun olabilir.

İlgili konular