使用地理距离扩展 SQL 查询

Posted

技术标签:

【中文标题】使用地理距离扩展 SQL 查询【英文标题】:Extending SQL query with geography distance 【发布时间】:2013-08-09 18:09:07 【问题描述】:

我有一个 SQL Server 2012 数据库,其中包含 300 万条公司记录,您可以在其中使用名称和地址字段中的一些 where like 子句进行搜索。这工作得非常快。

现在我用一个可选的点 + 距离参数来扩展这个查询。当使用这些参数时,查询会使用它们。

现在,仅搜索 varchar 列的速度非常快。仅搜索纬度/经度(点)+ 距离也很快。但是当我将两者结合起来时,它变得非常慢。

知道我可能做错了什么,或者我应该如何设置我的索引吗?

现在我有这些索引:

PK_CompanyId(主键附带的标准索引)

IX_CompanyData(正在搜索的 VARCHAR 字段的索引,并且该索引包含的列中包含 Lat 和 Long 列)

【问题讨论】:

到目前为止,您设置了哪些索引?地理列上有空间索引吗? 向我们展示表结构(列及其类型)并解释您是否已经拥有以及什么样的索引。也请告诉我们慢查询! 只是一个幼稚的尝试,但是您是否尝试过将两个快速查询相交?那是select ... from a where geography intersect select ... from a where varchar 对不起,我离开了几天,但现在我用我的索引信息编辑了我的问题。 【参考方案1】:

开始解决我的问题,首先将我的搜索结果缩小到与公司链接的城市的纬度/经度值上。这在性能上产生了巨大的差异。

【讨论】:

以上是关于使用地理距离扩展 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

距离计算效率 MSSQL 地理

SQL Server 2008 地理空间查询

弹性搜索5.x中地理距离查询中的返回距离

SQL2008 中用于地理数据类型的距离算法

使用sql oracle计算地理点之间的距离

在 sql server 2008 中使用地理数据类型的两点之间的距离?