SQLServerのGeographyデータ型を使用して郵便番号を使用している距離の人々に基づいて照合するクエリを作成しています。99%ありますが、2つの問題があります。現時点では、これはzip、都市、州で検索しますが、[u.username]でも実際に一致させる必要があります。「ORUsernameLIKE@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