【发布时间】:2015-07-23 01:27:37
【问题描述】:
我有一个带有地理列的表格,用于存储房产的位置。
我有一个类似这样的程序 -
PROCEDURE dbo.spt_sold_property_search
(
@latitude_min Decimal(9,6),
@latitude_max Decimal(9,6),
@longitude_max Decimal(9,6),
@longitude_min Decimal(9,6)
)
AS BEGIN
SET NOCOUNT ON
SELECT * FROM [dbo].[sold_property] AS p WITH(NOLOCK)
WHERE p.location ***is in the lat/long min max bounds***
END
我需要在 where 子句中检查地理点是否在 Lat/Long min max 的范围内?这是一个大型数据集,因此性能至关重要。
我是否应该在代码中从边界创建地理 SQL 类型并将其作为过程传递到 proc 中?
我还在考虑创建 2 个计算的 int 列(纬度/经度),它们将在插入时创建,然后是简单的 ,因为我听说这比地理查询要快。
【问题讨论】:
-
为什么不试试这两种方法?
-
“我需要在 where 子句中检查地理点是否在最大纬度/经度最小值的范围内?” - 这是我的问题,我不知道 where 语句会是什么来尝试...
-
知道了。
location列中的数据是什么样的? -
SQL-server 地理数据类型。
-
我没有使用
geography的经验,但是在网上快速浏览一下建议您需要将坐标转换为polygongeography然后使用.STWithin进行测试。见msdn.microsoft.com/en-us/library/ff929207.aspx 和sql-server-helper.com/sql-server-2008/…
标签: sql sql-server stored-procedures sqlgeography