数据表设计问题,涉及到JOIN和过滤重复记录,请大家赐教

BossKiller 发布于 2014/02/24 23:59
阅读 220
收藏 0

设计一个公文办理功能,基本上由三个表构成,文档表、节点表、用户表。逻辑描述是这样:

每个文档(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过滤掉。

请问还有速度更加快的解决方案吗?(包括数据表的设计和SQL的编写),请赐教!

TABLE documents
================
instance_id [主键]
title


TABLE nodes
================
instance_id [索引]
node_id [索引]


TABLE users
================
id [主键]
node_id [索引]
instance_id [索引]
user_id [索引]

以下是问题补充:

@BossKiller:过10万的document,用GROUP BY 或DISTINCT的时间是不用的3倍。 (2014/02/25 09:53)
加载中
0
红薯
红薯
这个SQL很简单了,注意好索引就够了
返回顶部
顶部