我正在使用 SQL Server 中的 Geography 数据类型创建一个查询,以根据距离人们使用邮政编码进行匹配。我在那里有 99%,但我有两个问题。目前,此搜索按 zip、城市和州进行,但我还需要在 [u.username] 上进行匹配。我无法获得添加“OR Username LIKE @Name”的语法。其次,性能不是很好。有来自美国各地的 21 个测试用户,查询需要 4 秒。
有没有办法加快速度并添加额外的搜索参数。到目前为止我有这个:
DECLARE @miles [float] = 10000;
DECLARE @myposition geography;
SELECT @myposition = GeoLocation FROM ZipCodes
WHERE Zip LIKE '11204';
SELECT z.*,z.GeoLocation.STDistance(@myposition) AS Distance INTO #HASHTABLE FROM ZipCodes z
WHERE z.GeoLocation.STDistance(@myposition) <= (@miles*1609.344)
ORDER BY Distance asc
;WITH Results_CTE AS (SELECT u.*,z.GeoLocation.STDistance(@myposition) AS Distance, ROW_NUMBER() OVER (ORDER BY z.GeoLocation.STDistance(@myposition)) AS RowNum
FROM Users u INNER JOIN ZipCodes z ON u.PostCode = z.Zip
WHERE u.PostCode in (SELECT Zip from #hashtable) OR u.City in (SELECT City from #hashtable)
) SELECT * FROM Results_CTE WHERE RowNum > 0
DROP TABLE #Hashtable