Я выполнил следующий тест, всегда сохраняя координаты 1,2. Это позволяет избежать затрат на обработку строк для преобразования координат в строки, чтобы использовать функцию DECLARE @location geography = geography :: Point ('1', '2', 4326); (который на момент написания статьи является наиболее эффективным способом получения типа Geography из координаты).
CREATE TABLE GeogXYtable ( GeogXYID int PRIMARY KEY IDENTITY(1,1), GeogXY Geography );
DECLARE @i int = 0;
WHILE (@i < 100000)
BEGIN
DECLARE @location geography = geography::Point( '1', '2', 4326 );
INSERT INTO GeogXYtable ( GeogXY ) VALUES (@location);
SET @i = @i + 1;
END
Для запуска вышеуказанного цикла требуется 59 секунд. (Экземпляр SQL Server больше ничего не делает, и результаты повторяются при повторном запуске).
Сравните это с сохранением координаты в виде двух отдельных чисел:
CREATE TABLE floatXYtable ( GeogXYID int PRIMARY KEY IDENTITY(1,1), X float, Y float );
DECLARE @i int = 0;
WHILE (@i < 100000)
BEGIN
INSERT INTO floatXYtable ( X, Y ) VALUES ( 1, 2 );
SET @i = @i + 1;
END
Для запуска вышеуказанного цикла требуется 38 секунд.
Вывод: сохранение точек в виде типов географии на 55% медленнее, чем сохранение их в виде чисел с плавающей точкой.