【问题标题】:SQL Server Spatial Index Nearest NeighbourSQL Server 空间索引最近邻
【发布时间】:2012-08-10 14:25:30
【问题描述】:

我正在尝试查询最近邻居的地理点,无论我是否使用空间索引,我总是得到相似的时间,大约需要 6 秒。如何加快查询速度?

这是我的查询:

Declare @param nvarchar(50);
set @param = 'POINT(32.489491 37.864724)'

Declare @paramGeom geometry = geometry::STPointFromText(@param, 4326);
Select top 1 MI_PRINX, MI_STYLE, TrafikIsigi, Demiryolu, UlkeSinir, ID, SP_GEOMETRY.STX AS Longitude, SP_GEOMETRY.STY AS Latitude, SP_GEOMETRY AS Geometry FROM dbo.NODE  (nolock)
WHERE NODE.SP_GEOMETRY.STDistance(@paramGeom) < 0.1
ORDER BY NODE.SP_GEOMETRY.STDistance(@paramGeom);

这是我的索引:

CREATE SPATIAL INDEX [IX_Spatial] ON [dbo].[NODE] 
(
    [SP_GEOMETRY]
)USING  GEOMETRY_GRID 
WITH (
BOUNDING_BOX =(25, 35, 46, 43), GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM), 
CELLS_PER_OBJECT = 64, PAD_INDEX  = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

任何帮助将不胜感激。

编辑/解决方案:

我这样更改了我的查询:

Declare @param nvarchar(50);
set @param = 'POINT(32.489491 37.864724)'

Declare @paramGeom geometry = geometry::STPointFromText(@param, 4326);

Select top 1 MI_PRINX, MI_STYLE, TrafikIsigi, Demiryolu, UlkeSinir, ID, SP_GEOMETRY.STX AS Longitude, SP_GEOMETRY.STY AS Latitude, SP_GEOMETRY AS Geometry FROM [dbo].[NODE] n WITH (INDEX(IX_Spatial))
WHERE n.SP_GEOMETRY.STDistance(@paramGeom) < 0.1
ORDER BY n.SP_GEOMETRY.STDistance(@paramGeom);

【问题讨论】:

  • 我认为这个问题更适合 gis.stackexchange.com。你的问题令人困惑。无法理解你想要什么。
  • 我需要加快查询速度。此查询在 2M 节点中大约需要 6 秒。
  • 试试这个stackoverflow.com/questions/3350965/…,看起来可能是一个类似的问题,也许它没有使用空间索引。
  • 谢谢,这解决了我的问题。

标签: sql-server sql-server-2008 spatial spatial-index spatial-query


【解决方案1】:

试试this,看起来可能是类似的问题,可能没有使用空间索引。 ——

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2020-05-21
    • 2018-05-19
    • 2018-06-16
    相关资源
    最近更新 更多