目的是将公司所有访问的IP做更新,打上新/老的戳。字段暂定2个:ip,type
现建了一张IP历史表,每天将访问的IP与历史表比对,如果存在就把历史表的type=1,不存在就插入到历史表type=0。
现在呢,不知道到目前为止所有出现过的、不重复IP的总数,可能百万也可能千万、亿万....下面是我的操作思路,目的只有一个,尽可能的快。用的是存储过程。
1. distinct 当天的IP 到tmp表
2. tmp表 inner join 历史表 on 两表IP相等,结果入tmp2 ,type打上1
3. delet tmp where tmp 在 tmp2 出现的ip
4. merge 历史表 use (tmp union tmp2)
这个方法我唯一担忧的是最后的merge,毕竟历史表是会不断增大,这样merge 下去会越来越慢。
【请拍砖,求抛玉】
现建了一张IP历史表,每天将访问的IP与历史表比对,如果存在就把历史表的type=1,不存在就插入到历史表type=0。
现在呢,不知道到目前为止所有出现过的、不重复IP的总数,可能百万也可能千万、亿万....下面是我的操作思路,目的只有一个,尽可能的快。用的是存储过程。
1. distinct 当天的IP 到tmp表
2. tmp表 inner join 历史表 on 两表IP相等,结果入tmp2 ,type打上1
3. delet tmp where tmp 在 tmp2 出现的ip
4. merge 历史表 use (tmp union tmp2)
这个方法我唯一担忧的是最后的merge,毕竟历史表是会不断增大,这样merge 下去会越来越慢。
【请拍砖,求抛玉】
解决方案 »
- ORA-12560: TNS: 协议适配器错误
- 一个关于客户端配置的问题,请教各位老大
- 求助oracle开发高手关于日期的问题?
- oracle有没有sqlserver中的uniqueidentifier字段
- 能不能在视图上建立索引?
- 数据库导出错误:ORA-3127,请高手帮忙~
- 触发器和事务处理的问题,高手请进!!!!
- 怎样将Oracle 数据转到Sql server中?其中Oracl中大量用到了触发器和存储过程.
- 在solaris下,使用pro*c连接oracle数据库的问题,我等了很久!
- Oracle忽略大小写的问题
- ORA-01001无效的游标
- PL/SQL 菜鸟提问 怎么把相同的人的记录放到同一行中,航班号用逗号隔开
最快的插入方法,直接插入,然后JOB运行你的业务
ip_tb ip
sip_tb ip u_type
*/merge into sip_tb spt
using (select ip
from ip_tb
where not exists (select null
from sip_tb
where sip_tb.ip = ip_tb.ip
and sip_tb.u_type = 1)) ipt
on (spt.ip = ipt.ip)
when matched then
update set spt.u_type = 1
when not matched then
insert values (ipt.ip, 0);
你Using里 获得的 当期与历史相比 是新的IP,这样永远也触发不了update
where sip_tb.ip = ip_tb.ip
and sip_tb.u_type = 1) 这个条件没限制到?
是新的,但是如果就的type=0,旧的IP也会触发update。