oracle向表写入单条记录,【讨论】怎么提高单条记录insert的效率

建表语句:

create table PD_PVTODAY

(

PVT_ID           NUMBER(32) not null,

PVT_SITEID       NUMBER(8) not null,

PVT_VISITORID    VARCHAR2(64) not null,

PVT_VISITID      VARCHAR2(64) not null,

PVT_VISITNUM     NUMBER(8) not null,

PVT_REFERDOMAIN  VARCHAR2(256) not null,

PVT_REFERURL     VARCHAR2(1024) not null,

PVT_PAGEDOMAIN   VARCHAR2(256) not null,

PVT_PAGEURL      VARCHAR2(1024) not null,

PVT_CLICKID      VARCHAR2(256) not null,

PVT_PAGETITLE    VARCHAR2(512) not null,

PVT_VISITTIME    DATE not null,

PVT_INTERVAL     NUMBER(8) not null,

PVT_PREVPAGE     VARCHAR2(1024) not null,

PVT_NEXTPAGE     VARCHAR2(1024) not null,

PVT_ENTERFLAG    NUMBER(2) not null,

PVT_EXITFLAG     NUMBER(2) not null,

PVT_SOURCE       NUMBER(2) not null,

PVT_SEID         NUMBER(4) not null,

PVT_SE           VARCHAR2(32) not null,

PVT_KEYWORD      VARCHAR2(256) not null,

PVT_ADCOSTID     VARCHAR2(64) not null,

PVT_ADCREATIVEID NUMBER(16) not null,

PVT_ADKEYWORDID  NUMBER(16) not null,

PVT_ISNEW        NUMBER(2) not null,

PVT_IP           NUMBER(16) not null,

PVT_ISP          NUMBER(2) not null,

PVT_AREAID       NUMBER(8) not null,

PVT_BRWPID       NUMBER(4) not null,

PVT_BRWPNAME     VARCHAR2(32) not null,

PVT_BRWID        NUMBER(4) not null,

PVT_BRW          VARCHAR2(32) not null,

PVT_OSPID        NUMBER(4) not null,

PVT_OSPNAME      VARCHAR2(32) not null,

PVT_OSID         NUMBER(4) not null,

PVT_OS           VARCHAR2(32) not null,

PVT_PIXEL        VARCHAR2(32) not null,

PVT_LANG         VARCHAR2(16) not null,

PVT_FLASH        VARCHAR2(32) not null,

PVT_CLIENT       NUMBER(2) not null,

PVT_CREATETIME   DATE not null,

PVT_DELFLAG      NUMBER(2) not null,

PVT_VERFLAG      NUMBER(2) not null

)

插入的存储过程如下:

create or replace procedure pv_today_insert(

--更新的数据

u_pvt_id        number,   --要更新的pvid

--插入的数据

m_siteid         number,   --网站ID

m_visitorid     varchar2, --访客ID

m_visitid         varchar2, --访问ID

m_visitnum     number,   --第几次访问

m_referdomain   varchar2, --来路域名

m_referurl           varchar2, --来路页面

m_pagedomain   varchar2, --受访域名

m_pageurl          varchar2, --受访页面

m_clickid             varchar2, --其他系统付费流量id(截取部分url)

m_pagetitle        varchar2, --受访页面标题

m_visittime         varchar2, --访问时间

m_interval          number,   --访问时长

m_prevpage      varchar2, --上一页

m_nextpage      varchar2, --下一页

m_enterflag      number,   --入口标记

m_source          number,   --来路分类

m_seid              number,   --搜索引擎ID

m_se                 varchar2, --搜索引擎名

m_keyword       varchar2, --关键字

m_adcostid       number,   --付费流量设置id(盘点)

m_adcreativeid number,   --付费流量创意id

m_adkeywordid  number,   --付费流量关键词id

m_isnew             number,   --新访客标记

m_ip                   number,   --IP地址

m_isp                 number,   --网络接入商

m_areaid           number,   --地区ID

m_brwpid          number,   --浏览器ID

m_brwpname     varchar2, --浏览器名

m_brwid             number,   --浏览器版本ID

m_brw               varchar2, --浏览器版本名

m_ospid            number,   --操作系统ID

m_ospname      varchar2, --操作系统名

m_osid              number,   --操作系统版本ID

m_os                varchar2, --操作系统版本名

m_pixel             varchar2, --分辨率

m_lang              varchar2, --语言

m_flash            varchar2, --Flash版本

m_client           number,   --终端类型

m_testid          out number

)

IS

cur_visittime DATE;

begin

cur_visittime := TO_DATE(m_visittime, 'YYYY-MM-DD HH24:MI:SS');

if u_pvt_id > 0 then

--更新上一条数据

update pd_pvtoday

set pvt_nextpage = m_pageurl,--u_pvt_nextpage,

pvt_interval = CEIL((cur_visittime - pvt_visittime) * 24 * 60 * 60),

pvt_exitflag = 0

where pvt_id = u_pvt_id;

end if;

--插入新的数据

insert into pd_pvtoday

(pvt_id,

pvt_siteid,

pvt_visitorid,

pvt_visitid,

pvt_visitnum,

pvt_referdomain,

pvt_referurl,

pvt_pagedomain,

pvt_pageurl,

pvt_clickid,

pvt_pagetitle,

pvt_visittime,

pvt_interval,

pvt_prevpage,

pvt_nextpage,

pvt_enterflag,

pvt_exitflag,

pvt_source,

pvt_seid,

pvt_se,

pvt_keyword,

pvt_adcostid,

pvt_adcreativeid,

pvt_adkeywordid,

pvt_isnew,

pvt_ip,

pvt_isp,

pvt_areaid,

pvt_brwpid,

pvt_brwpname,

pvt_brwid,

pvt_brw,

pvt_ospid,

pvt_ospname,

pvt_osid,

pvt_os,

pvt_pixel,

pvt_lang,

pvt_flash,

pvt_client,

pvt_createtime,

pvt_delflag,

pvt_verflag)

values

(seq_pvt_id.nextval,

m_siteid,

m_visitorid,

m_visitid,

m_visitnum,

m_referdomain,

m_referurl,

m_pagedomain,

m_pageurl,

m_clickid,

m_pagetitle,

cur_visittime,

m_interval,

m_prevpage,

m_nextpage,

m_enterflag,

1, --默认退出标记为1,下一条pv写入时更新上一条的退出标记为0

m_source,

m_seid,

m_se,

m_keyword,

m_adcostid,

m_adcreativeid,

m_adkeywordid,

m_isnew,

m_ip,

m_isp,

m_areaid,

m_brwpid,

m_brwpname,

m_brwid,

m_brw,

m_ospid,

m_ospname,

m_osid,

m_os,

m_pixel,

m_lang,

m_flash,

m_client,

sysdate,

0,

1);

COMMIT;

m_testid := seq_pvt_id.currval;

end;

在测试的过程中,执行时间总是维持在1.5—2秒左右,这样太慢了吧

这个插入存储过程有哪里可以优化的吗,想优化到执行一次,就是插入一条记录100毫秒以下吧

PS:

1、只是要缩短插入单条记录的时间

2、是每插一条就提交一条的,因为实时的要求,必须马上看到数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值