Estou tentando mover rotinas simples de geoprocessamento dos processos baseados em ESRI para o SQL Server. Minha suposição é que será muito mais eficiente. Para o meu teste inicial, estou trabalhando em uma rotina de interseção para associar dados lineares sobrepostos.
Na minha tabela WCASING, tenho 1610 registros. Estou tentando associar essas tripas às suas redes associadas. Eu tenho ~ 277.000 Mains. Eu tenho ~ 1.600 tripas.
Estou executando a consulta abaixo para ter uma noção geral de quanto tempo levará para encontrar correspondências individuais. Esta consulta retornou 5 interseções válidas em 40 segundos.
SELECT Top 5 [WCASING].[OBJECTID] As CasingOBJECTID,
[WPUMPPRESSUREMAIN].[OBJECTID] AS MainObjectID, [WCASING].[Shape]
FROM [dbo].[WPUMPPRESSUREMAIN]
JOIN [WCASING]
ON [WCASING].[Shape].STIntersects([WPUMPPRESSUREMAIN].[Shape]) = 1
Minhas perguntas primárias;
Esse processo será mais rápido, dependendo da ordem de pesquisa?
- Encontrar 'A' dentro de 'B' vs
- Encontrar 'B' dentro de 'A'
- O retorno inicial de 5 registros desses conjuntos de dados é que isso não importa
Esse processo será mais rápido se eu primeiro fizer um buffer para limitar a um conjunto principal menor e depois pesquisar?
Posso usar o SQL Server Tuning para trabalhar com consultas baseadas em geometria?
SELECT WCASING.OBJECTID AS CasingOBJECTID,
WPUMPPRESSUREMAIN.OBJECTID AS MainObjectID, WCASING.UFID AS UFID,
WPUMPPRESSUREMAIN_IPS.UFID AS MainUFID, WCASING.SHAPE
INTO WCASING_INTDefsV6
FROM WCASING with (index([FDO_ShapeWC]))
INNER JOIN [WPUMPPRESSUREMAIN_IPS] ON
[WPUMPPRESSUREMAIN_IPS].Shape.STIntersects(WCASING.SHAPE) = 1
Esta nova consulta melhorou as definições.
- Agora ambas as tabelas têm índices espaciais
- Anteriormente, a tabela de revestimento (menor) não tinha um índice espacial
- Continha um índice não clusterizado
A consulta também possui a instrução with index.
A nova consulta levou 37 minutos. A consulta antiga levou 44 minutos.
Eu esperava melhores resultados e continuarei testando.