怎么样提高 两表的多次关联查询性能?

floy floy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在数据库中,有两张表ms_property ,ms_messages

表ms_messages存放内容, 表ms_property存放属性,属性不是固定数量的,可能有很多,记录量约50W级
两表通过msgid关联,一条内容记录对应不定数的属性记录,记录数约6万级

表ms_property

propid msgid property
-----------------------------
1 1 11
2 1 22
3 1 33
4 1 44
5 1 AA
6 1 BB
7 1 CC
.
.
.
8 2 11
9 2 22
10 2 33
11 2 44
12 2 AA
13 2 BB
14 2 CC
.
.
.

表ms_messages

msgid message
----------------------------
1 msg1
2 msg2
.
.
.

为了查到符合指定属性要求的记录,我目前用下面的SQL,性能特别慢

SELECT msg.msgid,msg.content FROM ms_messages msg
JOIN ms_property prop ON prop.msgid = msg.msgid
WHERE msg.status = 1
AND prop.msgid in(SELECT DISTINCT msgid FROM ms_property WHERE property = '11')
AND prop.msgid in(SELECT DISTINCT msgid FROM ms_property WHERE property <> '22')
AND prop.msgid in(SELECT DISTINCT msgid FROM ms_property WHERE property IN ( '11','AA'))
AND prop.msgid in(SELECT DISTINCT msgid FROM ms_property WHERE property NOT IN ('33','BB'))
AND prop.msgid in(SELECT DISTINCT msgid FROM ms_property WHERE property IN ('44,','22','CC')
GROUP BY msg.msgid
LIMIT 20

那位可以指定一下,怎么去优化SQL,或是有什么简洁的设计思路
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
floy
疑难问题 22,298 成员 121,727 内容