2009-08-28 65 views
7

我目前有一個網站,其中有一個緯度/長度浮點型列表,還有一個索引在這兩列以及另一個我需要檢索的列表上。我可以在SQL Server 2008中創建「覆蓋,空間」索引嗎?

我不斷查詢此表以獲取從某一點(我實際上得到一個速度的正方形)落在半徑內的行,但我只需要已經索引的字段,所以此索引其實覆蓋,並執行計劃只有2個步驟:

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

現在,我試圖利用SQL 2008年我創建了地理列的空間特徵的優勢,填補它,創建空間索引,作品。

除了執行計劃有一百萬步之外,它一切正常,74%的時間花費在一個聚集索引搜索上,它將它在空間索引中找到的行連接到實際表中,拿到其餘數據...
(空間索引尋求採取執行計劃成本的1%)

所以,很明顯,適當地使用空間索引和查找記錄,我需要比快得多之前我在Lat/Long上的「常規」索引,但加入到主表中的是KILLING me,空間查詢需要我的舊查詢的7倍。

是否有任何方法可以向空間索引添加更多列,以便它可以覆蓋並且可以一步完成任務,就像之前做的一樣?
我還可以做其他事情來改善這種情況嗎?


更新:我發現「正規軍」索引可以使用包含關鍵字「包括」等欄目(我不知道,我以前只是包括指數本身的列)
根據到文檔here,該條款不是空間索引的選項... 任何想法?

謝謝!
Daniel

回答

4

不,很不幸,目前沒有辦法創建覆蓋空間索引 - 查詢將始終對基表執行書籤查找以獲取行的地理值。

對於STIntersects,這顯然總是需要的,因爲我們仍然需要對實際地理對象執行二級過濾器,以驗證它是否實際上與參數對象相交。但是,如果您不需要確切的答案並且可以使用Filter(),則可以根據索引提供主鍵列,而無需查找基本表。支持這是我們正在考慮的下一個版本。

在加速當前查詢方面,您是否嘗試過使用Filter()並使用sp_help_geography_index的輸出調整索引?

相關問題