讨论一个查询优化的算法交易表 a
交易ID,交易时间,交易金额,操作员编号操作员表 b
操作员编号 操作员名称整个业务中可能有1500个左右的操作员(或者更多),现在需要做如此查询:列出某段时间内进行交易
的操作员名称(比如08年12月-09年3月,或者时间段更长),在此期间进行的交易是非常多的(数量级是
万或者更多)算法1:从表a查询该段时间内进行操作的操作员编号,根据操作员编号再从表b查询对应编号的操作员
名称。这种算法效率非常低(比如表a有10000条记录,则需要在表b中进行10000次查询),尤其
是交易数据比较大的时候,而且有很多重复的查询。算法2: 从表a查询该段时间内进行操作的不重复的操作员编号,根据操作员编号再从表b查询对应编号
的操作员名称,写一编号与名称对应的函数,然后从表a中查询该段时间内进行操作的操作员编
号,根据编号与名称对应函数得到操作员名称。该算法在表a中进行了2次查询,当表a中数据大
的时候,效率也非常低。算法3: 写一函数getopname(flag,id,name),输入参数flag(判断该操作员编号 id 是否需要重新查询),
id,输出 name,从表a查询该段时间内进行操作的操作员编号,调用函数getopname得到name,flag
参数我想这么设计,0-表示需要在表b中根据id查询name,1-表示之前已经进行过查询了,直接从
查询存储的结果中取得。我现在想采用算法3,但是如何设计getopname函数还不是特别明确,然后就是该函数的flag参数如何确定
也不太清楚怎么做。大家觉得这种算法可取吗?如果可取的话,具体函数该如何设计呢? 或者不可取的话,
大家有什么更好的方法吗?
交易ID,交易时间,交易金额,操作员编号操作员表 b
操作员编号 操作员名称整个业务中可能有1500个左右的操作员(或者更多),现在需要做如此查询:列出某段时间内进行交易
的操作员名称(比如08年12月-09年3月,或者时间段更长),在此期间进行的交易是非常多的(数量级是
万或者更多)算法1:从表a查询该段时间内进行操作的操作员编号,根据操作员编号再从表b查询对应编号的操作员
名称。这种算法效率非常低(比如表a有10000条记录,则需要在表b中进行10000次查询),尤其
是交易数据比较大的时候,而且有很多重复的查询。算法2: 从表a查询该段时间内进行操作的不重复的操作员编号,根据操作员编号再从表b查询对应编号
的操作员名称,写一编号与名称对应的函数,然后从表a中查询该段时间内进行操作的操作员编
号,根据编号与名称对应函数得到操作员名称。该算法在表a中进行了2次查询,当表a中数据大
的时候,效率也非常低。算法3: 写一函数getopname(flag,id,name),输入参数flag(判断该操作员编号 id 是否需要重新查询),
id,输出 name,从表a查询该段时间内进行操作的操作员编号,调用函数getopname得到name,flag
参数我想这么设计,0-表示需要在表b中根据id查询name,1-表示之前已经进行过查询了,直接从
查询存储的结果中取得。我现在想采用算法3,但是如何设计getopname函数还不是特别明确,然后就是该函数的flag参数如何确定
也不太清楚怎么做。大家觉得这种算法可取吗?如果可取的话,具体函数该如何设计呢? 或者不可取的话,
大家有什么更好的方法吗?
解决方案 »
- DESC和User_Tab_Cols查询的结果不一样,求助
- 新手,system密码忘了怎么找回
- import导入出现ora-1013错误!
- ORACLE 如何将二进制转换成十进制?
- 请问有什么工具支持从INFORMIX迁移至ORACLE
- 在oracle中另建一个数据库的问题
- SQL优化,能不能请各位大哥帮帮忙,帮看一下
- SYSTEM我知道用在SQLPLUS上,可是SYS我怎么连接不上去,她用在哪里啊,我想建立个新的管理员帐号怎么建立啊?用OEM说什么包不能访问,但
- 如何在oracle8i下创建表?有哪些注意事项?
- 一个user怎么能看到另一个user下的表
- 急救:Oracle存储过程验证一个记录是否存在怎么写
- sql语句如何写?
(select distinct 操作员编号 from 交易表 a where 交易时间 between dt1 and dt2) t
where b.操作员编号 = t.操作员编号
根据操作员编号再从表b查询对应编号的操作员名称.
select b.* from 操作员表 b ,
(select distinct 操作员编号 from 交易表 a where 交易时间 between dt1 and dt2) t
where b.操作员编号 = t.操作员编号