Browse Source

优化邻里党群我的群列表查询慢问题

dev solveMyGroupSqlSlowly
liuchuang 6 years ago
parent
commit
35c491a3e3
  1. 89
      esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/resources/mapper/group/GroupDao.xml

89
esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/resources/mapper/group/GroupDao.xml

@ -108,29 +108,30 @@
<select id="selectListGroupsOfMine" resultType="com.elink.esua.epdc.dto.group.result.GroupsOfMineResultDTO"> <select id="selectListGroupsOfMine" resultType="com.elink.esua.epdc.dto.group.result.GroupsOfMineResultDTO">
SELECT SELECT
tmp.ID, t.ID,
tmp.GROUP_NAME, t.GROUP_NAME,
tmp.GROUP_AVATAR, t.GROUP_AVATAR,
tmp.GROUP_CATEGORY, t.GROUP_CATEGORY,
tmp.STATE, t.STATE,
tmp.totalNum, t.totalNum,
tmp.partyMemberNum, t.partyMemberNum,
tmp.unreadTopicNum, COUNT( DISTINCT ugpr.ID ) AS unreadTopicNum,
tmp.latestTopicTime, MAX( tp.CREATED_TIME ) AS latestTopicTime,
CASE CASE
WHEN tmp.STATE = 0 THEN
WHEN t.STATE = 0 THEN
'网格长会尽快审核您创建的社群,请耐心等待' '网格长会尽快审核您创建的社群,请耐心等待'
WHEN tmp.STATE = 5 THEN WHEN t.STATE = 5 THEN
tmp.PROCESSING_OPINIONS t.PROCESSING_OPINIONS
WHEN ( WHEN (
tmp.STATE = 10 t.STATE = 10
AND totalNum <![CDATA[ <= ]]> 1 AND t.totalNum <![CDATA[ <= ]]> 1
AND tmp.GROUP_CATEGORY = '1' AND t.GROUP_CATEGORY = '1'
AND tmp.topicNum = 0 AND COUNT( DISTINCT tp.ID ) = 0
) THEN ) THEN
'您的社群审核已通过,快加好友进来吧' ELSE '' '您的社群审核已通过,快加好友进来吧' ELSE ''
END AS description END AS description
FROM FROM
( (
SELECT SELECT
gp.ID, gp.ID,
@ -139,51 +140,39 @@ FROM
gp.GROUP_CATEGORY, gp.GROUP_CATEGORY,
gp.STATE, gp.STATE,
gp.PROCESSING_OPINIONS, gp.PROCESSING_OPINIONS,
( SUM( ugp.STATE = 10 ) AS totalNum,
SELECT SUM( ugp.PARTY_MEMBER = '1' ) AS partyMemberNum
COUNT( t.ID )
FROM FROM
epdc_user_group t epdc_group gp
LEFT JOIN epdc_user_group ugp ON ugp.GROUP_ID = gp.ID
AND ugp.DEL_FLAG = '0'
AND ugp.STATE = 10
WHERE WHERE
t.GROUP_ID = gp.ID gp.ID IN (
AND t.DEL_FLAG = '0'
AND t.STATE = 10
) AS totalNum,
(
SELECT SELECT
COUNT( t1.ID ) gp.ID
FROM
epdc_user_group t1
WHERE
t1.GROUP_ID = gp.ID
AND t1.DEL_FLAG = '0'
AND t1.STATE = 10
AND t1.PARTY_MEMBER = '1'
) AS partyMemberNum,
COUNT( DISTINCT ugpr.ID ) AS unreadTopicNum,
MAX( tp.CREATED_TIME ) AS latestTopicTime,
COUNT( DISTINCT tp.ID ) AS topicNum
FROM FROM
epdc_group gp epdc_group gp
RIGHT JOIN epdc_user_group ugp ON gp.ID = ugp.GROUP_ID RIGHT JOIN epdc_user_group ugp ON gp.ID = ugp.GROUP_ID
AND ugp.DEL_FLAG = '0' AND ugp.DEL_FLAG = '0'
AND ugp.USER_ID = #{userId}
AND ugp.STATE = 10 AND ugp.STATE = 10
LEFT JOIN epdc_group_topic_user_read ugpr ON gp.ID = ugpr.GROUP_ID AND ugp.USER_ID = #{userId}
AND ugpr.DEL_FLAG = '0'
AND ugpr.USER_ID = #{userId}
AND ugpr.READ_FLAG = '0'
LEFT JOIN epdc_topic tp ON gp.ID = tp.GROUP_ID
AND tp.DEL_FLAG = '0'
WHERE WHERE
gp.DEL_FLAG = '0' gp.DEL_FLAG = '0'
AND gp.STATE <![CDATA[ AND gp.STATE <> ]]> 20
AND gp.GRID_ID = #{gridId} AND gp.GRID_ID = #{gridId}
<![CDATA[ AND gp.STATE <> ]]> 20 )
GROUP BY GROUP BY
gp.ID gp.ID
ORDER BY ) t
MAX( tp.CREATED_TIME ) DESC LEFT JOIN epdc_group_topic_user_read ugpr ON t.ID = ugpr.GROUP_ID
) tmp AND ugpr.DEL_FLAG = '0'
AND ugpr.USER_ID = #{userId}
AND ugpr.READ_FLAG = '0'
LEFT JOIN epdc_topic tp ON t.ID = tp.GROUP_ID
AND tp.DEL_FLAG = '0'
GROUP BY
t.ID
ORDER BY ORDER BY
latestTopicTime DESC latestTopicTime DESC
</select> </select>

Loading…
Cancel
Save