2009-08-28 20 views
7

Şu anda Lat/Long float sütunları olan bir tablo ve bu 2 sütun üzerinde artı bir alması gereken başka bir dizin içeren bir sitem var.SQL Server 2008'de bir "Covering, Spatial" dizini oluşturabilir miyim?

Belirli bir noktadan bir yarıçap içinde yer alan satırları almak için bu tabloyu sürekli olarak sorgulıyorum (aslında hız için kare alıyorum), ancak yalnızca dizinlenmiş alanlara ihtiyacım var, bu dizin aslında örtüsü olduğunu ve yürütme planı sadece 2 adım vardır: Ben SQL Ben Coğrafya sütunu oluşturduk 2008. mekansal özelliklerinden yararlanmak çalışıyorum, Şimdi

Index Seek (cost: 100%) and SELECT (cost: 0%) 

yarattı, doldurdum mekansal indeks, eserler.

Ve her şey gayet iyi çalışıyor, ancak yürütme planının milyonlarca adımı vardır ve zamanın% 74'ü Kümelenmiş Dizin Aracında harcanır, burada Uzamsal Dizinde bulunan satırları gerçek tabloya dahil eder, verilerin dinlen ...
Yani

(Mekansal Index Seek Yürütme Planı Maliyet% 1 sürer), görünüşe göre, uygun şekilde Mekansal dizini kullanarak ve kayıtları bulma IS ben çok daha hızlı daha ihtiyaç Lat/Long üzerinden "normal" dizinimden önce, ama ana tablonun birleştirilmesi beni KILLING, Mekansal sorguyu eskisinden 7 kat daha uzun sürüyor.

Uzamsal indekse daha fazla sütun eklemenin bir yolu var mı? Böylece, daha önce yaptığı gibi, bir adımda işleri yapabilir.
Bu durumu iyileştirmek için yapabileceğim başka şeyler var mı?


GÜNCELLEME: Ben göre
(sadece endeks kendisi sütunları dahil Ben kullanılan bilmediğim) "normal" indeksleri anahtar kelime DAHİL kullanan diğer sütunları "include" bulmuşlardır here dokümantasyonuna göre, bu madde Mekansal Endeksler için bir seçenek değildir ... Herhangi bir fikir?

Teşekkürler!
Daniel

cevap

4

Hayır, maalesef şu anda bir kaplama uzamsal dizin oluşturmanın bir yolu yok - sorgu, satır için coğrafya değerini almak için her zaman temel tabloya yer işareti araması yapar.

STIntersects'ler için, bu, gerçekte nesne nesnesinin gerçekte kesiştiğini doğrulamak için hala gerçek coğrafya nesnesinde ikincil filtreyi gerçekleştirmemiz gerektiği için her zaman gereklidir. Ancak, tam cevap gerektirmeyen ve Filter() yöntemini kullanamazsanız, temel tablodaki sütunları hiç bir şekilde aramadan ana anahtar sütunlarını dizinden sağlamak mümkün olacaktır. Bunu desteklemek, bir sonraki sürüm için düşündüğümüz bir şey.

Geçerli sorgunuzu hızlandırmak açısından, Filter() yöntemini kullanarak ve dizininizi sp_help_geography_index çıktısıyla ayarlamayı denediniz mi?