我們有一個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萬+記錄?
現在我們是非常堅持:(提前
感謝, 傑夫