首页 新闻 会员 周边

怎么优化linq group by 分组之后转为Sql的语句

0
[已解决问题] 解决于 2018-01-23 14:49

linq 后台代码:

主要含义: 就是先根据PersonID分组查询,去掉重复的PersonID。 然后在这个结果集里面。根据PersonID,AlarmStatus升序,AlarmRecordID降序,获取最新的AlarmRecordID。 然后两个合并为结果集。

转为mysql 的SQL语句为 

SELECT t.PersonID,(SELECT AlarmRecordID FROM AlarmRecord WHERE OrganizationID = 4 AND IsDeleted = 0 

AND PersonID = t.PersonID 

ORDER BY AlarmStatus ASC,AlarmRecordID DESC LIMIT 1) AS AlarmRecordID

FROM AlarmRecord t WHERE t.OrganizationID = 4 AND t.IsDeleted = 0 

GROUP BY t.PersonID

我想优化标记为红色部分的SQL,请问怎么优化?

Hamilton Tan的主页 Hamilton Tan | 初学一级 | 园豆:167
提问于:2018-01-21 12:00
< >
分享
最佳答案
0

首先修改sql :

SELECT t.PersonID,(SELECT AlarmRecordID FROM AlarmRecord WHERE PersonID = t.PersonID ORDER BY AlarmStatus ASC,AlarmRecordID DESC LIMIT 1) AS AlarmRecordID
FROM AlarmRecord t WHERE t.OrganizationID = 4 AND t.IsDeleted = 0 
GROUP BY t.PersonID

通过创建索引来优化 

CREATE INDEX `idx_AlarmRecord_PersonID` ON `AlarmRecord`(`PersonID`, `AlarmStatus`);

通过创建索引,查询会快很多。如果不通过创建索引,有什么好的方法吗? 

 

Hamilton Tan | 初学一级 |园豆:167 | 2018-01-22 11:20
其他回答(1)
0

试试 join

dudu | 园豆:31007 (高人七级) | 2018-01-21 12:11

怎么join?

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2018-01-22 09:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册