Sqlgeography spatial operations slow-SQL Server 2016
Я провел некоторые тесты на новой пространственной библиотеке SqlGeography
в SQL Server 2016, которая, по мнению Microsoft, должна быть намного быстрее, чем предыдущие версии:
SQL Server 2016-он просто работает быстрее: собственные пространственные реализации. Применяйте SQL Server 2016 и широкий спектр методов и пространственных действий быстрее и масштабнее. Нет никаких изменений приложений или баз данных, только двоичные обновления SQL Server, показывающие резкое улучшение.
Однако, тесты показывают, что новая библиотека работает медленнее, чем старая.
Я протестировал его в C# с помощью Nugets, опубликованных Microsoft, Microsoft.SqlServer.Types
. Я протестировал версию 11 против версии 14 (SQL Server 2016).
Что я должен сделать, чтобы новая пространственная библиотека работала лучше?
Исходный код для небольшого теста:
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 ответ:
В этой статье Microsoft пишет, что Microsoft.От SQLServer.Типы больше не используются в коде T-SQL в SQL Server 2016. https://blogs.msdn.microsoft.com/psssql/2016/03/03/sql-2016-it-just-runs-faster-native-spatial-implementations/
Как это работает в SQL 2014:
По мере созревания типов пространственных данных SQL Server мы обнаружили От неуправляемого (SQL Server) к управляемому (Microsoft.От SQLServer.Типы) к SqlServerSpatial###.dll (неуправляемые) переходы (PInvoke и PUnInvoke) может стать узким местом масштабируемости
В SQL 2016:
(T-SQL) SQL Server 2016 вызывает собственную реализацию методы, избегающие неуправляемых к управляемым к неуправляемым переходам, увеличение производительности.
Похоже, что SQL 2016 использует SqlServerSpatial###.dll напрямую и производительность увеличивается только в коде T-SQL