我正在尝试在空间局部性上进行聚类(不只是创建空间索引),但SQL Server不允许这样做。要创建空间索引,首先要求我创建一个聚簇主键,这对于聚类没有任何意义。我想创建一个空间索引,然后以某种方式在空间位置上进行聚类。
我有一个想法,即创建将每个几何体分成特定的bin然后获取一些整数的bin。然后将其设置为所需的群集主键,这样至少我的一些数据在空间上聚集在一起。
我有点困惑SQL服务器不会这样做,所以要么我错过了如何做到这一点,或者很可能有人想到这个,有人可以提出一个足够好的解决方案。
我想在空间位置上进行聚类,因为我正在处理大数据,而我所做的第一个滤镜是通过空间位置(创建地图图块),而不是在空间位置聚类,我的页面现在基于一些无意义的自动增量而分散整数。
如果没有提出按空间位置进行分级的简单实现,我想我可以将几何的边界切割成相等的正方形然后为每个中心点运行一段距离公式,包括与该区域相交的所有几何图形。
这并不是特定于SQL服务器,我正在寻找解决空间位置上的索引/聚类的一般方法。我假设非mssql数据库可能内置了这个功能。
答案 0 :(得分:0)
我不知道如何实现这一点,无论实施如何。具体来说,聚类键的概念是,您(数据库引擎)可以告诉应该存储哪些行的顺序。对于每个其他数据类型(及其组合),这是可能的,因为最终您可以说出给定元组是更大,更小还是等于另一个。您可以使用什么度量标准来表示一个实例比另一个更大或更小的广义空间数据?尺寸?靠近原点?其他措施?在一般情况下,没有明确的意义,所以你不能这样做。
但并非一切都没有丢失。只需为您的行分配一个任意标识符(即标识列或由序列填充的列),并在其上进行集群。然后你可以在上面放一个空间索引然后去城里。查看您的问题,如果您的容器是预定义的,您可以将它们放在另一个表中并使用STIntersects
进行连接。但这可能会把车推到马前。