2014-04-15 44 views
6

~ 400k noktaları var. GEOGRAPHY mekansal sql.SQL Yerelleştirilmiş coğrafya noktaları için bir uzamsal dizinin en iyileştirilmesi

sorgu gönderilen @CentralPoint belli bir yarıçap içinde pointofinterest en bulmak için PointOfInterest.STDistance (@CentralPoint) < @Radius bu noktalar sorgulama olacaktır.

Izgaraların katmanlanması hakkında biraz bilgi okudum ve en mantıklı ızgara desenini öneren birilerinin ürünlerini bilmesini istiyorum. varsayılan

level_1 = ORTA, level_2 = ORTA, level_3 = ORTA, level_4 = ORTA

Ama benim durumum ben SADECE theUK içinde önemli yerleri olacak şekildedir. Müthiş olmasına rağmen, sadece terra firmanın göreceli bir özelliğini ele alıyoruz, bu yüzden bu durum için mekansal endekste kullanılacak daha iyi bir ızgara kalıbının olup olmadığını merak ediyordum.

Coğrafya tabanlı olmak Güzel görünümlü geometri sınırlayıcı kutuları kullanamıyorum. Ayrıca uzamsal yardıma muhtaç görünmeyen SQL Azure kullanıyorum :(

cevap

2

Spatial Endeksleme ile olduğu gibi, veri kümenizde çeşitli ızgara ayarlarını test etmenin farklı sonuçlar verebileceğini buluyorsunuz. Diğerlerininkiler: Düşük seviyelerde, Düşük, Düşük, Düşük değerlerin Düşük veya Düşük, Orta, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük, Düşük nokta ve bir kesişim için denetleme.On sık sık, daha iyi tutarlı düşük sonuç kez verim buldum ama veri üzerinde test edin.

DECLARE @point GEOGRAPHY = GEOGRAPHY::STPointFromText('POINT(<coords>)', 4326); 
DECLARE @radius INT = 1000; 

SELECT 
* 
FROM <table> 
WHERE <GeographyColumn>.STIntersects(@point.STBuffer(@radius)) = 1; 

Geometri'ye geçmek için dürtüden uzak durmaya çalışın, biraz daha hızlı sorguları alırken, düzlemsel bir modelle çalışmanın sonucu olarak "yanlış" sonuçlar elde etme şansı daha yüksektir. Arama mesafelerinin yeterince küçük olması durumunda, fark çoğu senaryoda farkedilemeyecektir.

+0

Teşekkürler! Düşük seviye ızgaraları önerilerinizin avantajlarını kısaca açıklayabiliyordum, çünkü daha hassas 'yüksek', onları okurken en iyi sesin en iyi olduğunu düşündükçe – BritishDeveloper

+0

@ BritishDeveloper, düşük seviye ızgaraları kullanarak dizini nispeten hafif ve hızlı tutuyor - LLLL Sadece içinde maksimum 65536 seviye-4 hücresi vardır. Çeşitli bilgi kümeleri üzerinde yapılan testler (İngiltere verileri olarak) genel olarak diğer kombinasyonlardan daha iyi performansa eşit veya daha iyi performans göstermiştir (hepsini denedim). Bununla birlikte, Çokgenlerle uğraşırken, karmaşıklık ile daha iyi başa çıkmanın yanı sıra, nesne değeri başına hücrelerle deney yapmak için daha yüksek bir seviyeye ihtiyaç vardır. MLLL veya HLLL'yi daha iyi bulmamın bazı örnekleri vardı, bu yüzden onları denemenizi öneriyorum ama 400k satırlarla 10'lu ms üstleri konuşuyoruz –

İlgili konular