Veritabanımdaki kayıtların konumunu depolamak için SQL Server coğrafya veri türü kullanıyorum. Bu oldukça hızlı bir şekilde çalışır benim test veritabanında düzine kayıtlarının bir çift ileCoğrafya ve mesafe kullanarak bir SQL Server veritabanından kayıtları seçin
DECLARE @location AS geography = geography::Point(@latitude, @longitude, 4326)
DECLARE @distance AS INT = 10000
SELECT *
FROM records
WHERE records.location.STDistance(@location) <= @distance
ve ben herhangi bir sorun yok, ama bildiğim: ben belirli bir konum belirli bir mesafe içinde tüm kayıtları seçmek ister misiniz WHERE cümlesi veritabanımdaki tüm kayıtlara karşı STDistance çalıştırıyor ve bir kez binlerce kayıt yaptığımda, bir taramayı yavaşlatacak.
Bunu yapmanın daha iyi bir yolu var mı? Belki bir tür bölge yaratın ve komşu bölgelerde ilk önce veriyi seçin.
Bununla birlikte ... ST_Distance fonksiyonunda kontrol edilir enlem/boylam değerleri aralığını daraltmak için sınırlama kutuları bir dizi yapabilirim, ben MIcrosoft yapmasına izin öneriyoruz. MSSQL uzaysal endeksleme için bir google yapın – Twelfth
[Mekansal İndeksler Genel Bakış] (http://msdn.microsoft.com/en-us/library/bb895265.aspx) – wdosanjos