2011-08-19 45 views
0

我們有一個SQL 2008數據庫,擁有2000萬+ geoWe位置(和增長),每個位置包含標準名稱/地址/地理/ ID /等列。高效的SQL地理wilcard名稱搜索20mill +記錄

我們需要一種基於距離而有效搜索記錄的方法,而且還需要通過全文索引來「包含」關鍵字。基本思想是我們根據最大距離搜索我們附近的位置。

現在,當我們搜索完整字符串(如1英里內的StarBucks)時,搜索將在幾秒鐘內返回。但是,如果我們在1英里範圍內搜索「明星」,搜索有時可能需要幾分鐘才能返回。

我們一直在玩弄邏輯像這樣:

DECLARE @geoSearchLocation GEOGRAPHY, @geoSearchPolygon GEOGRAPHY, @returncount smallint = 50 
SET @geoSearchLocation = geography::Point(40.729047, -74.010086, 4326); --NYC 
SET @geoSearchPolygon = geography::STGeomFromText('POLYGON((-74.015086 40.734047, 
             -74.015086 40.718047, 
             -74.005086 40.718047, 
             -74.005086 40.734047, 
             -74.015086 40.734047))', 4326); 
SET @geoSearchLocation = geography::Point(40.729047, -73.010086, 4326); 
SELECT TOP (100) --WITH TIES 
*, gt.LocationGeog.STDistance(@geoSearchLocation) AS dist 
FROM dbo.GeoLocation_Locations gt WITH (NOLOCK, INDEX(geolocation_HHHH128_sidx)) 
WHERE gt.LocationGeog.STIntersects(@geoSearchPolygon) = 1 
ORDER BY gt.LocationGeog.STDistance(@geoSearchLocation) 

這引入了愚弄和其它問題,但搜索。我們也一直在嘗試使用我們在網上找到的POWER論壇。

我們還有其他的查詢功能很好,這些查詢只基於距離或某個類別ID,那些查詢返回的時間不到一秒鐘。最大的問題是通配符字符串匹配。

有沒有人有一個很棒的SQL或CLR過程接受名稱(通配符支持)和距離時處理2000萬+記錄?

現在我們是非常堅持:(提前

感謝, 傑夫

回答

0

簡單LIKE謂詞只會工作幾乎好,如果你正在尋找'star%'並且該列有一個索引。性能但是隨着數據集數量的增加,它將繼續下降如果你能設置Sql Server的全文機制,你會變得更好,這並不難,它比索引LIKE