记一次查数据的需求
虽然不是专业的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;
作者:樊勇
出处:http://www.cnblogs.com/fanyong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
我的联系方式:fanyong@gmail.com
个人独立博客:www.fy98.com