SQL优化局部地理点的空间索引

SQL优化局部地理点的空间索引,sql,optimization,indexing,spatial,spatial-index,Sql,Optimization,Indexing,Spatial,Spatial Index,我有大约40万个兴趣点存储在地理空间sql中 我将使用PointOfInterest.STDistance(@CentralPoint)为了充分利用索引,考虑选择缓冲点和检查交叉点。再次,我发现它经常产生更好的一致的低结果时间,但是对数据进行测试。 DECLARE @point GEOGRAPHY = GEOGRAPHY::STPointFromText('POINT(<coords>)', 4326); DECLARE @radius INT = 1000; SELECT * F

我有大约40万个兴趣点存储在地理空间sql中

我将使用PointOfInterest.STDistance(@CentralPoint)<@Radius to查询这些点,以查找发送到查询的@CentralPoint的特定半径范围内的兴趣点

我读过一些关于网格分层的书,希望了解他们的人推荐最合理的网格模式。默认值是

第1级=中等,第2级=中等,第3级=中等,第4级= 中等

但我的情况是,我将只在英国境内拥有兴趣点。尽管非常棒,但我们只采用了terra firma的相对规格,所以我想知道是否有更好的网格模式用于本案例的空间索引


基于地理位置,我不能使用好看的几何体边界框。此外,我正在使用SQL Azure,它似乎没有存储空间帮助的过程:(

与以往使用空间索引一样,您最终会发现,在您的数据集上测试各种网格设置可以产生与其他数据集不同的结果。也就是说,我发现在所有级别上设置低,或者中、低、低、低都会产生很好的结果,因为分数过于简单

<> P>为了充分利用索引,考虑选择缓冲点和检查交叉点。再次,我发现它经常产生更好的一致的低结果时间,但是对数据进行测试。

DECLARE @point GEOGRAPHY = GEOGRAPHY::STPointFromText('POINT(<coords>)', 4326);
DECLARE @radius INT = 1000;

SELECT
*
FROM <table>
WHERE <GeographyColumn>.STIntersects(@point.STBuffer(@radius)) = 1;
DECLARE@point GEOGRAPHY=GEOGRAPHY::STPointFromText('point()',4326);
声明@radius INT=1000;
挑选
*
从…起
其中.STIntersects(@point.STBuffer(@radius))=1;

尽量远离切换到几何体的冲动,因为虽然它会产生稍微快一点的查询,但它有更多的机会产生“不正确的”由于使用平面模型而产生的结果。也就是说,如果搜索距离足够小,在大多数情况下,差异将不会明显。

谢谢!请简要说明您建议的低级别网格的优点,因为我认为在阅读有关them@BritishDeveloper,使用低级别网格可以使索引相对轻快-LLLL中最多只有65536个四级单元格。在多组信息(包括英国数据)上进行测试,结果通常比其他组合的性能更好,或者说相当于其他组合(我都试过了)但是,当处理多边形时,需要更高的级别来更好地处理复杂性,以及对每个对象值的单元格进行实验。我发现有些实例MLLL或HLLL更好,所以我也建议尝试它们,但对于400k行,我们谈论的是ms TOP的10