我数据库里的字段就是 用户唯一标识,访问页面,来源页面 之类的。
现在我要统计网页跳出率,我的思路是同一个用户访问了该页后没有其他页面的来源是该页面。
这个要做成报表,同时取出的页面很多,这样做执行效率太低了,可能是我思路上就已经不对了。
有做过类似功能的高手能帮我分析下吗?或者能给我提个好一点的思路,数据库表重做也没关系,小弟在这先谢了。

解决方案 »

  1.   

    GUID --用户唯一标识
    IP --IP
    OPEN_DATE     --打开页面时间
    PAGE_URL     --访问页面
    PAGE_URL_NO_PARA    --不带参数的访问页面
    REF_URL             --来源页面   
    REF_URL_NO_PARA     --不带参数的来源页面
    REF_SITE     --来源网站
    DOMAIN             --访问页面的domain,同一个网站可能有几个domain
    PAGE_URL_NO_DOMAIN  --不带domain的访问页面
    PAGE_URL_NO_DOMAIN_NO_PARA --不带domain不带参数的访问页面 以上是数据库的字段procedure sp_SearchAnalytics(
              p_start_date         in date,
              p_end_date           in date,
              p_keyword            in varchar2,
              p_domain             in varchar2,
              p_return             out cur_retrieve
    )
    as
    begin
    open p_return for
    select t.page_url_no_domain_no_para,
           t.view_count,
           (
           select count(distinct guid)
           from s_tvsn_analytics_history
           where page_url_no_domain_no_para = t.page_url_no_domain_no_para
           and  (p_start_date is null or open_date >= p_start_date)
           and  (p_end_date is null or open_date <= p_end_date)
           and  (p_domain  is null or domain = p_domain)
           ) user_count,
           --以下这个select效率非常低,是算跳出次数的
           (
           select count(*) 
           from s_tvsn_analytics_history tah
           where page_url_no_domain_no_para = t.page_url_no_domain_no_para
           and  (p_start_date is null or open_date >= p_start_date)
           and  (p_end_date is null or open_date <= p_end_date)
           and  (p_domain  is null or domain = p_domain)
           and (
               select count(*) 
               from s_tvsn_analytics_history
               where guid = tah.guid
               and   ip = tah.ip
               and   ref_url = tah.page_url
               and   open_date > tah.open_date
               ) = 0
           ) exit_count 
    from (
    select page_url_no_domain_no_para, 
           sum(1) view_count
    from s_tvsn_analytics_history
    where  (p_start_date is null or open_date >= p_start_date)
    and    (p_end_date is null or open_date <= p_end_date)
    and    (p_keyword is null or page_url_no_para like '%' || p_keyword || '%')
    and    (p_domain  is null or domain = p_domain)
    group by page_url_no_domain_no_para) t;
    end sp_SearchAnalytics;以上是存储过程的代码,执行效率非常低