【发布时间】:2017-03-23 13:03:51
【问题描述】:
我在存储项目位置的 2012 SQL 数据库中的地理字段上设置了空间索引。大约有 15,000 项。
我需要返回给定 Lat/Lng 半径 N 公里范围内的项目总数。
我能做到,而且速度很快。
DECLARE @radius GEOGRAPHY = GEOGRAPHY::Point(@Lat, @Lng, 4326).STBuffer(@RadiusInMetres*1000)
SELECT
COUNT(*) AS Total
FROM dbo.Items i
WHERE
i.LatLngGeo.STIntersects(@radius) = 1
但是,我现在需要做的是按几个字段过滤,以获取与给定类别和价格匹配的项目。
DECLARE @radius GEOGRAPHY = GEOGRAPHY::Point(@Lat, @Lng, 4326).STBuffer(@RadiusInMetres*1000)
SELECT
COUNT(*) AS Total
FROM dbo.Items i
WHERE
i.LatLngGeo.STIntersects(@radius) = 1 AND
(i.Category = @Category OR @Category is null) AND
(i.Price < @Price OR @Price is null)
这会持续大约 10 多秒,我找不到将 varchar 或数字字段添加到空间索引的方法。
我能做些什么来加快速度?
【问题讨论】:
-
查询计划是什么样的?是使用空间索引吗?
标签: sql sql-server spatial spatial-query sqlgeography