Что является более эффективным, география против типа с плавающей точкой в ​​SQL Server для выбора / вставки местоположений? - PullRequest
0 голосов
/ 14 мая 2018

Как влияет производительность на сохранение местоположения в качестве типа географии по сравнению с простым сохранением долготы и широты в виде одного поплавка?

1 Ответ

0 голосов
/ 14 мая 2018

Я выполнил следующий тест, всегда сохраняя координаты 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% медленнее, чем сохранение их в виде чисел с плавающей точкой.

...