我正在研究一个有点复杂的SQL选择,因为它与其他表有几个关系并且它会永远占用并最终给予超时,所以我被困住了,也许这里有人可以帮助我找到问题或者优化它。
对于你有一些上下文,select获取AREAS,还有许多其他实体都有idArea。一个区域也有一个中心(它所在的建筑物),还有其他实体,如PCI,它们也有一个与区域相关的c_central字段。
我有一个winform,我可以过滤AREAS表来定位某些区域,为此我有几个文本框或组合框我可以输入过滤信息(你会在where子句中看到它)。
我复制了下面的SELECT并插入了几个换行符,因此更容易阅读。
一个重要的注意事项,如果我取出PCI LEFT OUTER JOIN并且相应的PCI WHERE可以工作。
非常感谢提前。
SELECT dbo.tbGESFAI_AREA.id, dbo.tbGESFAI_AREA.c_grupo, dbo.tbGESFAI_AREA.c_area,
dbo.tbGESFAI_AREA.d_area, dbo.tbGESFAI_AREA.ficha, dbo.tbGESFAI_AREA.rev_numero,
dbo.tbGESFAI_AREA.rev_fecha_creacion, dbo.tbGESFAI_AREA.elevacion, dbo.tbGESFAI_AREA.c_central,
dbo.tbGESFAI_PCI.pci1, dbo.tbGESFAI_PCI.pci2, dbo.tbGESFAI_PCI.localizacion
FROM dbo.tbGESFAI_AREA
LEFT OUTER JOIN dbo.tbGESFAI_PENETRACION_A
ON dbo.tbGESFAI_AREA.id = dbo.tbGESFAI_PENETRACION_A.idArea
LEFT OUTER JOIN tbGESFAI_EXTINCIONFIJA
ON dbo.tbGESFAI_AREA.id = tbGESFAI_EXTINCIONFIJA.idArea
LEFT OUTER JOIN tbGESFAI_RECINTO
ON dbo.tbGESFAI_AREA.id = tbGESFAI_RECINTO.idArea
LEFT OUTER JOIN dbo.tbGESFAI_PUERTA_DETALLE_A
ON dbo.tbGESFAI_AREA.id = dbo.tbGESFAI_PUERTA_DETALLE_A.idArea
LEFT OUTER JOIN tbGESFAI_EXTINCIONMOVIL
ON dbo.tbGESFAI_AREA.id = tbGESFAI_EXTINCIONMOVIL.idArea
LEFT OUTER JOIN dbo.tbGESFAI_COMPUERTA_DETALLE_A
ON dbo.tbGESFAI_AREA.id = dbo.tbGESFAI_COMPUERTA_DETALLE_A.idArea
LEFT OUTER JOIN tbGESFAI_PCI
ON dbo.tbGESFAI_AREA.c_central = tbGESFAI_PCI.c_central
LEFT OUTER JOIN tbGESFAI_DETECCION
ON dbo.tbGESFAI_AREA.id = tbGESFAI_DETECCION.idArea
LEFT OUTER JOIN tbGESFAI_ALARMA
ON dbo.tbGESFAI_AREA.id = tbGESFAI_ALARMA.idArea
WHERE dbo.tbGESFAI_AREA.c_central = 'A'
AND dbo.tbGESFAI_PENETRACION_A.identificacion LIKE ('%a%')
AND dbo.tbGESFAI_EXTINCIONFIJA.EstacionControl LIKE ('%a%')
AND dbo.tbGESFAI_AREA.c_area LIKE ('%0%')
AND dbo.tbGESFAI_RECINTO.d_rec LIKE ('%1%')
AND dbo.tbGESFAI_PUERTA_DETALLE_A.puerta LIKE ('%1%')
AND dbo.tbGESFAI_EXTINCIONMOVIL.tag LIKE ('%1%')
AND dbo.tbGESFAI_COMPUERTA_DETALLE_A.compuerta LIKE ('%1%')
AND (dbo.tbGESFAI_PCI.pci1 LIKE ('%c2%')
OR dbo.tbGESFAI_PCI.pci2 LIKE ('%c2%')
OR dbo.tbGESFAI_PCI.LOCALIZACION LIKE ('%c2%'))
AND (dbo.tbGESFAI_AREA.c_estado = 'H'
OR dbo.tbGESFAI_AREA.c_estado = 'V'
OR dbo.tbGESFAI_AREA.c_estado = 'F')
GROUP BY dbo.tbGESFAI_AREA.id, dbo.tbGESFAI_AREA.c_grupo, dbo.tbGESFAI_AREA.c_area,
dbo.tbGESFAI_AREA.d_area, dbo.tbGESFAI_AREA.ficha, dbo.tbGESFAI_AREA.rev_numero,
dbo.tbGESFAI_AREA.rev_fecha_creacion, dbo.tbGESFAI_AREA.elevacion, dbo.tbGESFAI_AREA.c_central,
dbo.tbGESFAI_PCI.pci1, dbo.tbGESFAI_PCI.pci2, dbo.tbGESFAI_PCI.localizacion
ORDER BY c_area