SQL Server 2008空间数据功能是否对映射查询有用?

Dan*_*ola 7 indexing performance spatial sql-server-2008

我有一个应用程序,基本上我有一个巨大的表(1亿条记录)的信息,每行包含一个lat/long值.

我一直在查询这个表,以获得适合某个点的半径范围内的所有记录.例如,"所有记录在5.89288,-104.919434之间的5英里内"

为此,我有一个Lat/Long列的索引,我得到了点的"边界",然后丢弃了我的ASP.Net应用程序中所有落在圆圈之外的点,因为那样更快而不是在SQL Server中进行循环计算.
注意:这是关于美国的所有数据,所以我认为地球是平坦的,我的计算,这足以满足我的需要.

现在,Lat/Long索引的主要问题是作为点的"正方形",并且因为我试图找到"在x和y之间拉"和"在x和y之间长",它实际上不是真的超级有效地使用索引,因为如果我在搜索"一行"点,就可以.

我一直在阅读SQL 2008的空间功能,但我还没有找到足够的具体信息来了解这对我是否有用.

所以问题是:SQL 2008是否有某种不同类型的索引可以使这种特定类型的查询比SQL 2005更快?

Sau*_*tka 5

是! 查看有关空间索引的文章.您将看到这些类型的索引比"索引矩形"方法更好.此外,您不仅可以有效地查询"点在另一点附近",还可以进行所有其他类型的地理操作.以下是该类型所有可用方法的完整列表.


Dan*_*ola 3

发现这个:

对于 SQL 2008:
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/sql-server-2008-proximity-search-with-th

显然这是可能的

注意:该文章的 SQL 2005 版本的性能不太好。我已经尝试过这类事情,最好从 SQL Server 获取正方形,然后在您自己的代码中剔除圆圈。

更多感兴趣的链接:

http://msdn.microsoft.com/en-us/library/bb964712.aspx
(最后一个解释!!)

还有一个示例查询...显然这是如何进行我想要的搜索(5 英里圆圈内的点):

DECLARE @Location GEOGRAPHY
SET @Location = GEOGRAPHY::STPointFromText('POINT(73.9517061 40.7934358)',4326).STBuffer(5 * 1600);
SELECT [fields] FROM [table] WHERE LocGeog.STIntersects(@Location) = 1
Run Code Online (Sandbox Code Playgroud)

(LocGeog是地理栏目)

但奇怪的是,它的运行速度比我的常规旧查询慢得多(慢了 7 倍),所以我显然仍然在做一些非常错误的事情。