具有多个连接的SQL Server选择查询会给出超时

时间:2018-01-26 10:22:02

标签: sql-server

我正在研究一个有点复杂的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

0 个答案:

没有答案