开发者社区> 问答> 正文

数据表中有关JOIN和过滤重复记录的问题

设计一个公文办理功能,基本上由三个表构成,文档表、节点表、用户表。逻辑描述是这样:
每个文档(document)都可以分为若干个办理节点(nodes),每个办理节点存在1个或多个用户(users)。
要查询某个用户(例如user_id = 100)办理的所有文档,一般是这样查询:
`SELECT D.* FROM documents D INNER JOIN users U ON (D.instance_id=U.instance_id)
WHERE U.user_id = 100 GROUP BY D.instance_id`

`SELECT DISTINCT D.* FROM documents D INNER JOIN users U ON
(D.instance_id=U.instance_id) WHERE U.user_id = 100`
上面使用GROUP BY D.instance_id DISTINCT 是因为用户可能多次存在与文档的不同节点,因此要把重复的document过滤掉。
请问还有速度更加快的解决方案吗?请赐教!
TABLE documents中instance_id [主键]、title
TABLE nodes 中node_id [索引]
TABLE users 中id [主键] 、node_id [索引] 、instance_id [索引] 、user_id [索引]

展开
收起
落地花开啦 2016-02-22 15:41:56 2076 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    索引方面,发现 users 表的 [instance_id + user_id] 做索引会更快一些。

    2019-07-17 18:46:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RowKey与索引设计:技巧与案例分析 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载