大批量参数输入查询处理
我是电信的,原来公司有一套PB开发的系统,现转成Web模式。使用的部门很不讲理,很多时候要以原PB系统的运行速度和Web模式的作比较。所以只有优化,别无选择。
现有一令小弟头疼的问题望能解决:
有一张全市的话费表约1400万条数据。里面有200万个号码。
有两个字段:
号码 话费帐目项
110 本地话费
110 长途话费
112 本地话费
现在要对表进行报表统计。
要一次过输入6000至8000个号码,在这张表找出对应的号码。
要知道 oracle in的最大数为1000个,所以当初我用or in(“前1000个号码”)+or in(1000至1999的号码)的方法拼成sql语句执行。
当输入的电话数为4000左右的话,输出的结果是4000*该批号码对应帐目项可能就是40000条记录,我用了分页的方式运行4000条号码的查询,只要5秒内就能出结果。
当中包含的外表关联就不说了,总之1000至2000的批量输入是很快的基本和PB的速度一样,而且经过压力测试可以多并发。
但使用的部门叼,一次输入个6、7000个。搞到oracle出现个share_pool错误。估计是sql拼起来过长所致,叫他们分开录入,他们就以PB那套系统,6000、70000三秒就搞定了。而且是全部结果都显示出来了。然后说:“我要的就是这样的速度”,我都欲哭无泪。但领导也要求这样。
所以只能考虑用中间表了,但多用户操作报表查询的话,要怎样解决呢??