建表语句:
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、是每插一条就提交一条的,因为实时的要求,必须马上看到数据