记一次查数据的需求

虽然不是专业的DBA,但是经常和数据库打交道,做一些如写脚本、写SP,优化DB的工作。今天就接到一个查询数据的需求。

需求

大致需求是查询7天的、指定bookid清单的列表中查询每本书的PV、UV,包括免费页面和收费页面。
查询的思路是:

1.从生产库中导出7天的数据到一张中间表(因为生产库太大太大,根据特定条件导出数据到中间表)

2.在中间中查询每本书的PV、UV

问题

问题1:7天的数据依然很大,2亿多。首先建索引,在where条件上建立索引,索引还是有很管用的,建与不建前后差别很大;

CREATE INDEX idx_tmp_pvhis_read_url ON tmp_pvhis_read (pageurl) NOLOGGING PARALLEL 4;

问题2:一共有几十本、上百本书,一条一个sql语句效率太低,把这么多单独的sql语句写成一个循环,每个循环中,拿到列表中bookid
进行查询,然后把查询到的结果放到结果表中。
只要保证把sql写好,运行之前测试好,把脚本放在PL/SQL Developer中按下F8就可以安心的喝咖啡去了。

小技巧

1.根据已有的表复制表结构(不复制数据)

create table tmp_2014416_vipbook
as
select * from tmp_2014415_book where 1 = 2;

2.Oracle PL/SQL 循环游标中的每一个元素

begin
  for v1 in (select bookid,bookname from tmp_2014415_book t) loop
    dbms_output.put_line(v1.bookid||'    '||v1.bookname);
  end loop;
end;
原文地址:https://www.cnblogs.com/fanyong/p/3646272.html