Кросс-соединение с STDistance занимает слишком много времени - PullRequest
0 голосов
/ 07 августа 2020

Редко в моей среде SQL SERVER 2016 мне нужно получить расстояние между данными Geography из двух разных таблиц, как показано ниже.

CREATE TABLE #Geos1 (GeoPoint GEOGRAPHY)
INSERT INTO #Geos1
SELECT TOP 2000 Geo FROM MyTable1 ORDER BY Id DESC

CREATE TABLE #Geos2 (GeoPoint GEOGRAPHY)
INSERT INTO #Geos2
SELECT TOP 500 Geo FROM MyTable2 ORDER BY Id DESC

SET STATISTICS TIME ON
SET STATISTICS IO ON 
SELECT p1.GeoPoint.STDistance(p2.GeoPoint)
FROM #Geos1 p1 CROSS JOIN #Geos2 p2

Проблема возникает, когда количество строк растет. Я знаю "проблемы с производительностью" перекрестного соединения, но я вижу, что я удаляю STDistance и "просто" выбираю данные, время отклика значительно уменьшается (9 сек c против 50 сек c по моим причинам "приемлемо" ).

Вот план запроса и статистика: План запроса

Статистика

Есть ли какие-нибудь советы по оптимизации ситуации или единственное «решение» - уменьшить количество строк? Спасибо

...