{/'title/':/'优化MySql语句://n//nSELECT SUM(COALESCE(i1.PowerInverter, 0.0)) AS PowerInverter, SUM(COALESCE(i1.ThisPower, 0.0)) AS ThisPower//nFROM (//n SELECT i.EquipmentId, (//n SELECT i0.Id//n FROM Inverter_History AS i0//n WHERE NOT i0.Deleted AND i.EquipmentId = i0.EquipmentId //n ORDER BY i0.RecordTime DESC//n LIMIT 1) AS Id//n FROM Inverter_History AS i//n WHERE NOT i.Deleted //n GROUP BY i.EquipmentId//n) AS t//nLEFT JOIN Inverter_History AS i1 ON t.Id = i1.Id//nLEFT JOIN Equipment_Info AS e ON t.EquipmentId = e.Id//nLEFT JOIN Equipment_Type AS e0 ON e.EquipmentTypeId = e0.Id//nLEFT JOIN Base_Enterprise AS b ON e.EnterpriseId = b.Id//nWHERE i1.Deleted = FALSE AND e.Deleted = FALSE AND e.IsEnable = TRUE AND e0.Deleted = FALSE AND e0.IsEnable = TRUE AND b.Deleted = FALSE AND b.IsEnable = TRUE AND e.EnterpriseId = '32a6060f-0914-11ee-84b7-6c3c8c6a422e' //nGROUP BY e.EnterpriseId/',/'content/':/'优化后的MySQL语句如下://n//nSELECT SUM(COALESCE(i1.PowerInverter, 0.0)) AS PowerInverter, SUM(COALESCE(i1.ThisPower, 0.0)) AS ThisPower//nFROM (//n SELECT i.EquipmentId, MAX(i.Id) AS Id//n FROM Inverter_History AS i//n WHERE NOT i.Deleted //n GROUP BY i.EquipmentId//n) AS t//nLEFT JOIN Inverter_History AS i1 ON t.Id = i1.Id//nLEFT JOIN Equipment_Info AS e ON t.EquipmentId = e.Id//nLEFT JOIN Equipment_Type AS e0 ON e.EquipmentTypeId = e0.Id//nLEFT JOIN Base_Enterprise AS b ON e.EnterpriseId = b.Id//nWHERE i1.Deleted = FALSE AND e.Deleted = FALSE AND e.IsEnable = TRUE AND e0.Deleted = FALSE AND e0.IsEnable = TRUE AND b.Deleted = FALSE AND b.IsEnable = TRUE AND e.EnterpriseId = '32a6060f-0914-11ee-84b7-6c3c8c6a422e' //nGROUP BY e.EnterpriseId//n//n优化说明://n1. 在子查询中使用MAX(i.Id)替代了原先的子查询中的ORDER BY i0.RecordTime DESC LIMIT 1,这样可以更高效地获取每个设备的最新记录的Id。//n2. 去除了子查询中的NOT i0.Deleted条件,因为在主查询的WHERE条件中已经包含了i1.Deleted = FALSE,确保了只获取未删除的记录。//n3. 将整个子查询的结果命名为t,方便后面的连接查询使用。//n4. 去除了GROUP BY子句中的t.EquipmentId,因为在主查询中已经通过t.Id = i1.Id保证了只有一个对应的设备Id。//n5. 将原先的子查询中的i0改为i1,更好地与连接查询中的表别名保持一致。//n6. 优化了连接查询的顺序,将表Inverter_History放在了最前面,这样可以更高效地使用索引。//n7. 去除了多余的条件判断,如e0.IsEnable = TRUEb.IsEnable = TRUE,因为在主查询的WHERE条件中已经包含了e.IsEnable = TRUEb.IsEnable = TRUE,确保了只获取启用的设备和企业的记录。/


原文地址: https://www.cveoy.top/t/topic/pIrw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录