Her biri zaman alanları (ortalama julian tarihi için mjd) ve coğrafya pozisyonları (GeoPoint, spacial) ile uydu verilerinden iki set ölçümüm var ve iki set arasındaki tesadüfleri arıyorum, böylece zamanları bir eşikle eşleşiyor 3 saat (veya .125 gün) ve birbirlerinin 200 km'lik mesafeleri.
Hem mjd alanları hem de tablolar ve uzamsal tablolar için dizinler yaptık.
Zaman kısıtlamasına katıldığımda, veritabanı 8 saniyede 100.000 eşleşmeyi hesaplar ve o zamandaki tüm 100.000 eşleşme için mesafeleri hesaplar. Sorgu şöyle görünür:
select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0
from L2V5.dbo.header h join L2.dbo.MLS_Header m
on h.mjd between m.mjd-.125 and m.mjd+.125
option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) )
Ve yürütülen plan:
Sıralandığında, mesafelerin 9'u 200 km'nin altındaydı, bu yüzden eşleşmeler var. Sorun, mesafe kısıtlamasını eklediğimde ve bunun yerine çalıştırdığımda,
select top 10 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0
from L2V5.dbo.header h join L2.dbo.MLS_Header m
on h.mjd between m.mjd-.125 and m.mjd+.125
and h.GeoPoint.STDistance(m.GeoPoint)<200000
option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) )
uzun süre kayboluyor. Açıkçası, 8 saniye içinde, 9'u 200 km'nin altında olan 100.000 zaman eşleşmesi bulabilir, bu nedenle optimize edici alt optimal bir şey deniyor olmalıdır. Plan yukarıdaki mesafelere bir filtre ile yukarıdakine benzer (tahmin ediyorum).
Bu ile mekansal endeks kullanımını zorlayabilir:
select top 5 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0
from L2V5.dbo.header h join L2.dbo.MLS_Header m
on h.GeoPoint.STDistance(m.GeoPoint)<200000
and h.mjd between m.mjd-.125 and m.mjd+.125
option( table hint ( h, index(ix_MJD), index(ix_GeoPoint) ), table hint( m, index(ix_MJD) ) )
daha sonra 5 maç bulmak için 3 dakika sürer.
Sorgu optimize ediciye ilk olarak MJD indeksi aramasını ve sonra uzamsal indeksi ikinci olarak nasıl kullanacağımı söyleyebilirim (ya da zaten ne yapıyor?) 8 saniyede 200 km'nin altında 9'lu mesafelerle 100.000 eşleşmeyi hesaplayabiliyorsa, uzamsal dizinin eklenmesi daha hızlı olmamasını sağlamamalı mı?
Diğer ipuçları veya fikirler için teşekkürler.
EDIT: Planın ipuçları olmadan nasıl göründüğü sorusuna cevap vermek için, bu (ve sonsuza kadar sürer):
Ayrıca, bir tabloda neredeyse 1M, diğerinde 8M kayıtlarının bulunduğunu belirtmek gerekir.