sql server uzamsal dizin performansı


14

İçinde yaklaşık 2 milyon kayıt bulunan bir masam var. Sınırlama kutusu dışındaki varsayılanları kullanarak bir uzamsal dizin oluşturun. Bazı sorguların son derece hızlı ve bazılarının son derece yavaş olduğunu fark ettim. Belirleyici faktör, sorguda kullanılan çokgen boyutuna görünür.

Daha büyük arama alanlarında, WITH(INDEX(SIX_FT5))sorguyu önemli ölçüde yavaşlatır (0 saniyeden 15 saniyeye). Daha küçük arama alanlarında, tam tersi doğrudur.

Test ettiğim sorgulardan bazıları:

Hızlı:

SELECT TOP(1000) * FROM [FT5] WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) 

Yavaş:

SELECT TOP(1000) * FROM [FT5] WITH(INDEX(SIX_FT5)) WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) 

Burada neler olduğunu bilen var mı?


Geçen gün sadece benzer bir şeyden geçiyordum ... Metinden çokgen oluşturmuyordum, ancak kesişen noktalar ve çokgenler ... Mekansal indeksi kullanmayı belirledim büyük hız sonuçları elde etti. Sonra çokgen üzerinde uzamsal endeksi kullanarak denedim ve çok kötü bir performans vardı ... Bu sorunun tam tersi gibi görünüyor!
DPSSpatial

4
Bunu düşünürseniz, arama zarfının boyutunu değiştirmenin sorgu üzerinde önemli bir etkisi olmalıdır - bir dizin yoluyla döndürülen satır sayısı arttıkça yanıt yavaşlar. Bir noktada, tam tablo taraması ve zarf tabanlı satırları atmak daha hızlı hale gelir. Muhtemelen dizin optimizasyonu için yer olduğundan, uzamsal dizin seçenekleri ile daha fazla zaman harcamanızı öneririz.
Vince

Kayıtlarınız puanları mı temsil ediyor? Bu ifade edilmedi. Ayrıca, kullandığınız dizin oluşturma sözdizimini yayınlayabilir misiniz? AutoGrid miydi?
gischimp

'Coğrafya Otomatik Gird' ve 'Nesne Başına Hücre' = 4000 kullandım. ~ 45K çokgen ile 110+ milyon noktaya kesiştim.
Michael

1
Hatırlamanız gereken başka bir şey, bir kesişimin karmaşık bir işlem olması, önce öğelerin kesişip kesişmediğine bakması, dizinlerle nispeten hızlı işlem yapması gerekir, ancak daha sonra eşleşen her öğe için, her bir öğenin gerçekten kesişip kesişmediğini hesaplaması gerekir. çokgenler daha karmaşık ve / veya daha fazla sayıda olduğu için daha da maliyetli hale gelen bir başka, daha maliyetli bir işlemdir.
AKK2

Yanıtlar:


1

As @Vince tarafından yorumladı :

Bunu düşünürseniz, arama zarfının boyutunu değiştirmenin sorgu üzerinde önemli bir etkisi olmalıdır - bir dizin yoluyla döndürülen satır sayısı arttıkça yanıt yavaşlar. Bir noktada, tam tablo taraması ve zarf tabanlı satırları atmak daha hızlı hale gelir. Muhtemelen dizin optimizasyonu için yer olduğundan, uzamsal dizin seçenekleri ile daha fazla zaman harcamanızı öneririz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.