Запуск SQL Server 2014 StandardНахождение округа на дороге с помощью STContains
У меня есть около 1 млн LineString (представляют собой дороги) и 98 полигонов (графства). Я хочу обновить то, в каком графстве принадлежит дорога. Мой запрос:
UPDATE RAW_HERE
SET COUNTY = RAW_HERE_COUNTY.POLYGON_NM
FROM [dbo].[RAW_HERE_PROCESSED_SINGLE] AS RAW_HERE
INNER JOIN [RAW_HERE_D91_COUNTY] as RAW_HERE_COUNTY ON (RAW_HERE_COUNTY.[Shape].STContains(RAW_HERE.[Shape]) = 1)
Этот запрос был запущен в течение 3 часов и подсчета голосов, и я проверить его с помощью пространственного индекса на RAW_HERE_D91_COUNTY
RAW_HERE_PROCESSED_SINGLE
содержит объект LineString (их столбец геометрии [форму]) RAW_HERE_D91_COUNTY
содержит граф многоугольников, их геометрический столбец также [shape].
Есть ли более быстрый способ сделать это? Я что-то упускаю?
Вы уверены, что хотите использовать 'STContains()', а не 'STIntersects()'? Первый проверяет, находится ли (в вашем случае) дорога полностью в пределах округа, в то время как последняя проверяет, находится ли какая-либо часть дороги в округе. Много дорог, которые я знаю, охватывают более одного округа, поэтому я думаю, что наличие дороги только для одного округа кажется мне странной моделью данных. Кроме того, я вижу, что сервер должен больше работать для 'STContains()' над 'STIntersects()', но это всего лишь ощущение кишки. –
Если дорога пересекается с двумя уездами, то в каком графстве она попадет? Мой план состоял в том, чтобы сначала заполнить тех, кто был полностью сложен, а затем разобраться с краевыми случаями, если они охватывают несколько. – LearningJrDev
Точно моя точка. В любом случае, думая об этом больше, мне было интересно, действительно ли это обновление, которое занимает так много времени. Но похоже, что вы пришли к такому же выводу с вашим самопомощи. –