explain (SELECT netdev.id,devName,ip,birthdayDate,manufacturer,sendDate,maintenanceDate,build,pp.paraName as ppname,netdev.xh as xhname,'服务器' as type,O.oname FROM netdev
left join para as pp on netdev.pp = pp.id left join organize as O on netdev.zzid=O.id where netdev.id)
union all
(SELECT s.id,subName as devName,subIp as ip,birthdayDate,manufacturer,sendDate,maintenanceDate,build,a.paraname as ppname,s.XH as xhname,'控制单元' as type,O.oname FROM subserver s left join para as a on s.PP = a.id left join organize as O on s.zzid=O.id WHERE zzid != '0' )
union all
(SELECT crossing.id,crsName as devName,crsIp as ip,birthdayDate,manufacturer,sendDate,maintenanceDate,build,pp.paraName as ppname,crossing.xh as xhname,'运维节点' as type,O.oname FROM crossing
left join para as pp on crossing.pp = pp.id left join organize as O on crossing.zzid=O.id)
union all
(SELECT cam.id,cam.cameraName as devName,cam.ip as ip,birthdayDate,p.paraName as manufacturer,sendDate,maintenanceDate,build,pp.paraName as ppname,cam.xh as xhname,'前端设备' as type,O.oname FROM camera as cam left join para as pp on cam.pp = pp.id left join crossingcamera crs on crs.cameraCode = cam.cameraCode left join para as p on cam.sdk = p.paraValue and p.paraType='manufacturer' left join organize as O on cam.zzid=O.id)
union all
(SELECT R.id,R.name as devName,R.ip,birthdayDate,manufacturer,sendDate,maintenanceDate,build,pp.paraName as ppname,R.xh as xhname,'动环设备' as type,O.oname FROM ringdev
as R left join para as pp on R.pp=pp.id left join organize as O on R.oid=O.id)
union all
(SELECT O.id,O.name as devName,O.ip,birthdayDate,manufacturer,sendDate,maintenanceDate,build,pp.paraName as ppname,O.xh as xhname,'其他设备' as type,ORG.oname FROM otherdev
as O left join para as pp on O.pp=pp.id left join organize as ORG on O.oid=ORG.id)
limit 0,20
现在想显示所有设备的信息,因为最初的建表原因(建表非本人操作)... 所以用到union all
但是当某个表的数据达到10w以上查询就变的很慢 这个应该怎么优化?
之前因为问题不完整,可能是我想简单了... 请各位谅解 !!!
主表后面没有WHERE条件,关联表都是用的LEFT,肯定要全表扫描的 吧