首先,问下有没有讲经典场景数据库表设计的帖子或书籍推荐,比如评论、好友、用户-商品-订单、用户权限等等类似这些经典场景
然后是我的问题。。
有三张表:
PROCESS (id, title, state, create_time, end_time)
TASK (id,pro_id, name, create_time, end_time, identity_str)
TASK_IDENTITY (id, task_id, type, user_id, group_id)
关联关系:PROCESS - TASK(1对多),TASK-TASK_IDENTITY (1对多),
实际上就是 流程、任务、任务所属用户或组 3个表,
流程同时有0个或多个任务,有状态字段,state=2 时表示已结束,没有任务
任务结束后会删除 TASK 表的数据,任务同时属于多个用户或组,用户同时在多个组里面
查询1:
查询某人的待处理任务,要同时查出PROCESS 、PROCESS 两表的数据,和总数,同时查询出的字段要支持过滤和排序(就是页面要展示列表和分页数据,同时有高级查询可以任意过滤和排序,太变态了。。)
select * (这里是A、B两表的部分字段,省略写了)
from PROCESS pro inner join TASK task on pro.id=task.pro_id
inner join (
select ident.task_id
from TASK_IDENTITY ident
where (ident.user_id=xxx or ident.group_id in (xx1,xx2,xx3))
and ident.type!='x'
group by ident.task_id
) t on b.b_id=t.b_id
where pro.
order by task.create_time desc
limit 0,15;
现在的问题是中间的临时表极端情况会查出来很多数据,再关联就很慢,
而且列表字段过滤都是要全模糊的查询,索引要失效
不知道怎么优化。。。
查询2:
查询所有流程及其当前的任务和所属人员,同样要同时查出PROCESS 、PROCESS 两表的数据,和总数,还要支持过滤
select *
from PROCESS pro left jion TASK task on pro.id=task.pro_id
where pro.state!=0
order by pro.create_time desc
limit 0,15;
我将 TASK_IDENTITY 的数据拼接后冗余到 TASK 表了,所以如果没有 TASK_IDENTITY 表的条件的话就不用关联它
但是同样的,表数据达到50w就没得玩了,目前就是根据不同的过滤条件拼不同的SQL, 索引问题没办法解决。。
请求大佬指点
然后是我的问题。。
有三张表:
PROCESS (id, title, state, create_time, end_time)
TASK (id,pro_id, name, create_time, end_time, identity_str)
TASK_IDENTITY (id, task_id, type, user_id, group_id)
关联关系:PROCESS - TASK(1对多),TASK-TASK_IDENTITY (1对多),
实际上就是 流程、任务、任务所属用户或组 3个表,
流程同时有0个或多个任务,有状态字段,state=2 时表示已结束,没有任务
任务结束后会删除 TASK 表的数据,任务同时属于多个用户或组,用户同时在多个组里面
查询1:
查询某人的待处理任务,要同时查出PROCESS 、PROCESS 两表的数据,和总数,同时查询出的字段要支持过滤和排序(就是页面要展示列表和分页数据,同时有高级查询可以任意过滤和排序,太变态了。。)
select * (这里是A、B两表的部分字段,省略写了)
from PROCESS pro inner join TASK task on pro.id=task.pro_id
inner join (
select ident.task_id
from TASK_IDENTITY ident
where (ident.user_id=xxx or ident.group_id in (xx1,xx2,xx3))
and ident.type!='x'
group by ident.task_id
) t on b.b_id=t.b_id
where pro.
order by task.create_time desc
limit 0,15;
现在的问题是中间的临时表极端情况会查出来很多数据,再关联就很慢,
而且列表字段过滤都是要全模糊的查询,索引要失效
不知道怎么优化。。。
查询2:
查询所有流程及其当前的任务和所属人员,同样要同时查出PROCESS 、PROCESS 两表的数据,和总数,还要支持过滤
select *
from PROCESS pro left jion TASK task on pro.id=task.pro_id
where pro.state!=0
order by pro.create_time desc
limit 0,15;
我将 TASK_IDENTITY 的数据拼接后冗余到 TASK 表了,所以如果没有 TASK_IDENTITY 表的条件的话就不用关联它
但是同样的,表数据达到50w就没得玩了,目前就是根据不同的过滤条件拼不同的SQL, 索引问题没办法解决。。
请求大佬指点
