SqlGeography空间操作速度慢 - SQL Server 2016

时间:2017-05-06 09:00:23

标签: c# .net sql-server performance sql-server-2016

我已经在SQL Server 2016中的新空间库SqlGeography上运行了一些测试,根据Microsoft的说法应该比以前的版本快得多:

  

SQL Server 2016 - 它运行速度更快:本机空间实现。应用SQL Server 2016,更广泛的方法和空间活动更快,更好地扩展。没有应用程序或数据库更改只是SQL Server二进制更新显示出显着的改进。

但是,测试显示新库比旧库慢。 我在C#中使用Microsoft发布的Nugets Microsoft.SqlServer.Types进行了测试。我已经针对版本14(SQL Server 2016)测试了版本11。

为了让新的空间库表现更好,我该怎么做?

小测试的源代码是:

var line1 = CreateLine(56, -4, 58, 16);
var line2 = CreateLine(58, -4, 56, 16);

for (int i = 0; i < 50000; i++)
{
     var intersection = line1.STIntersects(line2);
     var contains = line1.STBuffer(1000).STContains(line1);
}

public static SqlGeography CreateLine(double fromLat, double fromLon, double toLat, double toLon)
{
     SqlGeographyBuilder constructed = new SqlGeographyBuilder();
     constructed.SetSrid(4326);
     constructed.BeginGeography(OpenGisGeographyType.LineString);
     constructed.BeginFigure(fromLat, fromLon);
     constructed.AddLine(toLat, toLon);
     constructed.EndFigure();
     constructed.EndGeography();
     var line = constructed.ConstructedGeography;
     return line;
 }

1 个答案:

答案 0 :(得分:8)

在本文中,Microsoft写道,SQL Server 2016中的T-SQL代码中不再使用Microsoft.SqlServer.Types。 https://blogs.msdn.microsoft.com/psssql/2016/03/03/sql-2016-it-just-runs-faster-native-spatial-implementations/

它如何在SQL 2014中运行:

  

随着SQL Server Spatial数据类型的成熟,我们发现了   非托管(SQL Server)到托管(Microsoft.SqlServer.Types)   SqlServerSpatial ###。dll(非托管)转换(PInvoke和   PUnInvoke)可能成为可扩展性瓶颈

在SQL 2016中:

  

(T-SQL)SQL Server 2016调用了 native 的实现   方法,避免Unmanaged to Managed to Unmanaged transition,   提高绩效。

似乎SQL 2016直接使用SqlServerSpatial ###。dll并且只在T-SQL代码中增加了性能