Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 空间数据距离搜索-优化选项_Sql_Sql Server 2008_Spatial - Fatal编程技术网

Sql 空间数据距离搜索-优化选项

Sql 空间数据距离搜索-优化选项,sql,sql-server-2008,spatial,Sql,Sql Server 2008,Spatial,我们的商业用户喜欢按距离进行搜索,问题是我们有超过100万条横向/纵向位置的记录。我们使用的是SQL 2008,但当我们按查询距离排序或限制搜索时,会遇到问题,查询的时间会超过30秒。这是不可接受的,必须有更好的方法来做到这一点。我们已经用SQL 2008做了我们能做的一切,并且希望在某个时候升级到2012 不过我想问,我们是否可以应用其他技术或优化。我们是否可以切换到不同的数据库以提高性能、应用不同的搜索算法、估计算法、树、网格、预计算等?此处可能有用的解决方案是将搜索分为两部分: 1运行一个

我们的商业用户喜欢按距离进行搜索,问题是我们有超过100万条横向/纵向位置的记录。我们使用的是SQL 2008,但当我们按查询距离排序或限制搜索时,会遇到问题,查询的时间会超过30秒。这是不可接受的,必须有更好的方法来做到这一点。我们已经用SQL 2008做了我们能做的一切,并且希望在某个时候升级到2012


不过我想问,我们是否可以应用其他技术或优化。我们是否可以切换到不同的数据库以提高性能、应用不同的搜索算法、估计算法、树、网格、预计算等?

此处可能有用的解决方案是将搜索分为两部分:

1运行一个查询,在该查询中,您可以找到位于您所在位置当前lat/lng的某个值+或-范围内的所有记录,where子句可能如下所示:

其中@latitude>lat-.001和@latitude>lat-.001和@longitude>lng-.001和@longitude>longitude-.001

使用这种方法,尤其是使用纬度和经度列上的索引,可以非常快速地定义指定距离内的位置工作集

2根据步骤1的粗略结果,使用大圆/哈弗斯线方法确定震源位置与每个点之间的实际距离


这种方法的缺点是,如果搜索的半径没有任何限制,但如果您正在查找给定点特定距离内的所有位置,它会非常有效。

问题,您当前是否使用SQLServer 2008中提供的空间索引?是,我们在网格密度上来回移动,并使用withindex提示验证了索引的使用。我们可以快速应用常规筛选器,但一旦按距离排序,我们就会失去所有性能,这似乎是最常见的抱怨。如果在筛选器限制返回的行后按距离排序,是否会发生性能损失,500-1000?如果来自primarty mssql筛选器的初始搜索区域像任何大都市一样返回大量结果,则似乎会发生这种情况。我们已经看到MSSQL在超过30秒的时间内被200条记录阻塞。该网站提供了一种有效搜索给定距离内坐标的极好方法:用于空间索引的主过滤器可以非常快速地完成这项工作,这只是距离的一部分,看起来很奇怪。你是如何进行大圆计算的?STDistance,MSSQL 2008空间数据的内置函数。我创建了自己的函数,甚至简化了计算,但没有任何加快速度的运气。