Mysql 空间几何图形索引的性能是否取决于几何图形的大小和密度? 空间索引
给定一个空间索引,就是索引效用,也就是说索引的整体性能,只与整体几何一样好 例如,如果我要获取一百万个几何体数据类型并将它们插入表中,以便它们的相对点彼此密集,那么这是否会使该索引对相对位置可能明显稀疏的相同几何体形状的性能更好 问题1 例如,以这两个几何图形为例 情景1 它们在几何上是相同的,但它们的坐标相差一个点。想象一下这被重复了一百万次 现在就拿这个情况来说, 情景2 在上述示例中:Mysql 空间几何图形索引的性能是否取决于几何图形的大小和密度? 空间索引,mysql,spatial,spatial-index,mbr,Mysql,Spatial,Spatial Index,Mbr,给定一个空间索引,就是索引效用,也就是说索引的整体性能,只与整体几何一样好 例如,如果我要获取一百万个几何体数据类型并将它们插入表中,以便它们的相对点彼此密集,那么这是否会使该索引对相对位置可能明显稀疏的相同几何体形状的性能更好 问题1 例如,以这两个几何图形为例 情景1 它们在几何上是相同的,但它们的坐标相差一个点。想象一下这被重复了一百万次 现在就拿这个情况来说, 情景2 在上述示例中: 线路尺寸与情况1相同 这些线的点数相同 这些线的尺寸相同 但是, 不同之处在于两条线之间的距离更大
- 线路尺寸与情况1相同
- 这些线的点数相同
- 这些线的尺寸相同
- 不同之处在于两条线之间的距离更大李>
为什么这对我很重要? 我问这个问题的原因是因为我想知道我是否应该尽可能地降低输入几何体的精度,并尽可能地减少它们的密度和彼此之间的接近度,而不损失精度 问题2 这个问题类似于第一个问题,但不是在空间上接近另一个几何图形,而是应该将这些图形本身简化为尽可能小的形状,以描述应用程序所需的形状 例如,如果要对几何数据类型使用空间索引来提供日期数据。 如果我想存储两个日期的日期范围,我可以在mysql中使用datetime数据类型。但是,如果我想使用一个几何体类型,以便通过获取每个日期并将其转换为unix_timestamp()来转换日期范围,该怎么办 例如:
Date("1st January 2011") to Timestamp = 1293861600
Date("31st January 2011") to Timestamp = 1296453600
现在,我可以基于这两个整数创建一个LINESTRING
LINESTRING(1293861600 0,1296453600 1)
如果我的应用程序实际上只关心天数,而秒数对日期范围根本不重要,那么我是否应该重构几何图形,使其尽可能缩小,以满足它们的需要
因此,我将使用“1293861600”/(3600*24),而不是“1293861600”,它恰好是“14975.25”
有人可以帮助填补这些空白吗?插入新条目时,引擎选择将最小扩展的
MBR
通过“最小扩展”,引擎可以表示“区域扩展”或“周界扩展”,前者是MySQL中的默认值
这意味着,只要节点的面积不为零,它们的绝对大小就无关紧要:较大的MBR
保持较大,较小的保持较小,最终所有节点都将位于相同的MBR
中
您可能对这些条款感兴趣:
MBR
会在页面拆分时重新计算,距离主集群太远的所有点很有可能在第一次拆分时被移动到自己的MBR
。它会很大,但在很少的迭代中会成为所有未完成点的父对象
这将减少未完成点的搜索时间,并将群集点的搜索时间增加一页搜索。插入新条目时,引擎选择最小扩展的
MBR
通过“最小扩展”,引擎可以表示“区域扩展”或“周界扩展”,前者是MySQL中的默认值
这意味着,只要节点的面积不为零,它们的绝对大小就无关紧要:较大的MBR
保持较大,较小的保持较小,最终所有节点都将位于相同的MBR
中
您可能对这些条款感兴趣:
MBR
会在页面拆分时重新计算,距离主集群太远的所有点很有可能在第一次拆分时被移动到自己的MBR
。它会很大,但在很少的迭代中会成为所有未完成点的父对象
这将减少未完成点的搜索时间,并将群集点的搜索时间增加一页搜索。谢谢。我不可能要求一个更合格的人来回答:)我不太确定我是否完全理解。你是说在回答我的第二个问题时,面积无关紧要,因为MBR是相同的。@Laykes:是的,只要相对值保持不变,
MBR
哪一个增量最小并不取决于绝对值。Quassnoi,与我的原始问题无关,虽然与我为什么一开始就问这个问题有关。是一个值得使用的空间索引,用于查找未“接触”的几何体或特定MBR内的几何体。例如,在假日/酒店系统中,我可以在线条点周围使用边界框来显示房间在某个日期的填充时间,但我是否应该使用空间索引来查找包含该日期空置房间的行?例如,查找1月1日至1月5日之间的空房?@Laykes:只要时段在房间内不相交,两种查询都需要空间能力。对于给定的日期,只需找到每个房间最接近的开始日期
(这可以通过B树
索引实现),然后查看结束日期
是否在给定日期之后。谢谢。我不可能要求一个更合格的人来回答:)我不太确定我是否完全理解。你是这么说的吗
Date("1st January 2011") to Timestamp = 1293861600
Date("31st January 2011") to Timestamp = 1296453600
LINESTRING(1293861600 0,1296453600 1)