Browse Source

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

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

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

@ -108,82 +108,71 @@
<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 '网格长会尽快审核您创建的社群,请耐心等待'
tmp.PROCESSING_OPINIONS WHEN t.STATE = 5 THEN
WHEN ( t.PROCESSING_OPINIONS
tmp.STATE = 10 WHEN (
AND totalNum <![CDATA[ <= ]]> 1 t.STATE = 10
AND tmp.GROUP_CATEGORY = '1' AND t.totalNum <![CDATA[ <= ]]> 1
AND tmp.topicNum = 0 AND t.GROUP_CATEGORY = '1'
) THEN AND COUNT( DISTINCT tp.ID ) = 0
'您的社群审核已通过,快加好友进来吧' ELSE '' ) THEN
END AS description '您的社群审核已通过,快加好友进来吧' ELSE ''
FROM END AS description
( FROM
SELECT
gp.ID,
gp.GROUP_NAME,
gp.GROUP_AVATAR,
gp.GROUP_CATEGORY,
gp.STATE,
gp.PROCESSING_OPINIONS,
(
SELECT
COUNT( t.ID )
FROM
epdc_user_group t
WHERE
t.GROUP_ID = gp.ID
AND t.DEL_FLAG = '0'
AND t.STATE = 10
) AS totalNum,
( (
SELECT SELECT
COUNT( t1.ID ) gp.ID,
FROM gp.GROUP_NAME,
epdc_user_group t1 gp.GROUP_AVATAR,
WHERE gp.GROUP_CATEGORY,
t1.GROUP_ID = gp.ID gp.STATE,
AND t1.DEL_FLAG = '0' gp.PROCESSING_OPINIONS,
AND t1.STATE = 10 SUM( ugp.STATE = 10 ) AS totalNum,
AND t1.PARTY_MEMBER = '1' SUM( ugp.PARTY_MEMBER = '1' ) AS partyMemberNum
) 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 LEFT JOIN epdc_user_group ugp ON ugp.GROUP_ID = gp.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 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.ID IN (
AND gp.GRID_ID = #{gridId} SELECT
<![CDATA[ AND gp.STATE <> ]]> 20 gp.ID
FROM
epdc_group gp
RIGHT JOIN epdc_user_group ugp ON gp.ID = ugp.GROUP_ID
AND ugp.DEL_FLAG = '0'
AND ugp.STATE = 10
AND ugp.USER_ID = #{userId}
WHERE
gp.DEL_FLAG = '0'
AND gp.STATE <![CDATA[ AND gp.STATE <> ]]> 20
AND gp.GRID_ID = #{gridId}
)
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