【问题标题】:STcontains() query running slow even with Spatial Index即使使用空间索引,STcontains() 查询也运行缓慢
【发布时间】:2012-11-12 03:52:30
【问题描述】:

我有一张名为“Region”的表,它有 2000 条记录。在区域表中,我有 1 个称为点的几何列。现在我有另一个名为 Bus_Route 的表,其几何列名为“geometry”,包含 1000 万条记录。现在我想要位于该区域的点。我正在使用以下查询来查看天气,我的观点是否在该地区,是否使用 STcontains。但是这个查询需要很长时间(大约 3 天)。我在我的 Bus_Route 表上创建了空间索引,该表有 1000 万条记录,但这也没有帮助。

         Select
              Region.BlockID,
              Bus_Route.geometry
              from 
              Bus_Route,                         
              Region
           where 

              Region.points.STContains(Bus_Route.geometry) = 1

请帮忙!

【问题讨论】:

    标签: sql sql-server sql-server-2008-r2 geospatial spatial


    【解决方案1】:

    几个观察:

    1. 因为您的公共汽车可能不会穿过平地,请使用 地理而不是几何。
    2. 如果您要进行交叉连接 (正如您所说的那样,您的查询正在执行),请通过以下方式明确说明 做类似的事情:

      选择 Region.BlockID, Bus_Route.geometry 从 Bus_Route
      交叉连接区域

    3. 您是否考虑过使用 STIntersects 而不是 STContains?如果我正确解释了您的问题,那么您正在寻找给定路线经过的区域,这意味着两个地理实例之间的交集将是非空的。您编写的查询将显示完全封闭在区域内的路线。

    【讨论】:

    • 嗨,本,谢谢你的回复。我已经将我的几何图形转换为地理现在这个问题是我有 4000 个纬度/经度点构成一个区域,我想检查该区域中是否存在 1 个纬度/经度点(4000 点)。我该如何使用 STContains geography 呢?声明@g 地理;声明@h 地理; SET @g = 4000 个具有纬度/经度的点,存储在数据库中 SET @h = 地理(我要检查的纬度/经度点)请帮忙!
    • 当你说你有 4000 个点构成一个区域时,这些点是定义区域边界的线段的端点吗?我不是在这里钓鱼,但这本身就是一个有趣的问题(即你应该为此提出一个单独的问题)。我的第一个猜测是,您将必须从点中获取该区域的文本表示,然后使用静态地理方法将其解析回地理实例。不过,这对我来说似乎是迂回的;我会做一些挖掘工作。
    • 感谢您的回复本。我将更详细地解释。我有地理形式的一个地区的纬度/经度(构成一个地区的纬度/经度的轮廓)。现在我有 1 点纬度/经度,我想确定该点是否在我的区域内。我将如何做到这一点?所以这里 4000 个点构成了一个区域的轮廓,1 个点是检查该区域是否存在。我将如何检查?谢谢你的回答本!
    • 是的。你和我对你的问题说同样的话。我要你做的是记录另一个问题。虽然它与您的业务问题有关,但它实际上是另一个技术问题,有其他人可能会觉得有用的有趣答案。
    • 哦...让我知道它在哪里;我有一些可能会起作用的东西。 ;)
    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2015-05-19
    相关资源
    最近更新 更多