Estoy intentando mover rutinas de geoprocesamiento simples de procesos basados en ESRI a SQL Server. Mi suposición es que será mucho más eficiente. Para mi prueba inicial, estoy trabajando en una rutina de intersección para asociar datos lineales superpuestos.
En mi tabla WCASING tengo 1610 registros. Estoy tratando de asociar estas tripas con sus redes principales asociadas. Tengo ~ 277,000 platos principales. Tengo ~ 1.600 tripas.
Estoy ejecutando la consulta a continuación para tener una idea general de cuánto tiempo llevará encontrar coincidencias individuales. Esta consulta devolvió 5 intersecciones válidas en 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
Mis preguntas principales
¿Se procesará más rápido según el orden de búsqueda?
- Encontrar 'A' dentro de 'B' vs
- Encontrar 'B' dentro de 'A'
- El retorno inicial de 5 registros de estos conjuntos de datos es que no importa
¿Se procesará esto más rápido si primero amortiguo para limitar a un conjunto principal más pequeño y luego busco?
¿Puedo usar SQL Server Tuning para trabajar con consultas basadas en geometría?
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 nueva consulta tiene definiciones mejoradas.
- Ahora ambas tablas tienen índices espaciales
- Anteriormente, la tabla de revestimiento (más pequeña) no tenía un índice espacial
- Sí contenía un índice no agrupado
La consulta también tiene la instrucción with index.
La nueva consulta tomó 37 minutos. La consulta anterior tardó 44 minutos.
Esperaba mejores resultados y seguiré probando.