8. 合理的逻辑设计合理的逻辑设计
以某实际应用系统为例,原来任务管理模块并发用户数只有以某实际应用系统为例,原来任务管理模块并发用户数只有 1515 个,个,
该模块用来显示所有待处理的任务,以及每个任务的里程碑个数。该模块用来显示所有待处理的任务,以及每个任务的里程碑个数。
经过检查,发现其实现如下:经过检查,发现其实现如下:
执行语句执行语句 SELECT COUNT(*) FROM TASK;SELECT COUNT(*) FROM TASK;
select task_id from task order by task_id desc;select task_id from task order by task_id desc;
对结果集中的每条记录对结果集中的每条记录
{{
SELECT * FROM TASK_STEP WHERE TASK_STEP.TASK_ID=?SELECT * FROM TASK_STEP WHERE TASK_STEP.TASK_ID=?
}}
分析:如果分析:如果 TASKTASK 表有表有 1000010000 条记录,需要向数据库发送条记录,需要向数据库发送 1000010000 个查询个查询
。。
假设通讯使用了假设通讯使用了 100ms100ms ,每个查询的执行时间是,每个查询的执行时间是 20ms20ms 。使用的时间。使用的时间
为:为:
(100ms+20ms)*10000=1200s=20min(100ms+20ms)*10000=1200s=20min
9. 解决方案解决方案
select task_step.*select task_step.*
from task,task_stepfrom task,task_step
where task_step.task_id = task.task_idwhere task_step.task_id = task.task_id
order by task.task_id desc;order by task.task_id desc;
备注:备注:
11 )继续对)继续对 task_step.*task_step.* 处理,减少网络通讯量。处理,减少网络通讯量。
22 )默认看到自己的任务,提供连接查询其他任务)默认看到自己的任务,提供连接查询其他任务
。。
11. 解决方案解决方案
create sequence myseq increment by 1;create sequence myseq increment by 1;
insert into task values(myseq.nextval,...);insert into task values(myseq.nextval,...);