使用WITH提高查询效率
2012-01-15 20:59
295 查看
前两天的业务需求里需要关联好几张表出一个详单报表,这个需求其实很简单,但是数据量大,源表又不是分区表,就变得很头疼了。
最初我的代码大概是这样子的:
这样的话如果三个表数据量小就没事儿了,一会儿就跑出来了。但是我们的A表上亿,A一个id对应B里的好多个id,那么B的数据量就更大了。C也差不多,这样一来就要老命了。这个时候我想到了用with这个办法来减小数据量。
WITH这个东西主要是产生一个临时的表,可以通过各种条件见小数据量,挑选需要的列,如此这般,数据量就会小很多。WITH没有办法提高效率,但是就是降低数据量,靠硬件的优势。修改以后的代码如下:
经过业务上跑了一遍,原本13个小时没有跑出来的过程,居然很快的跑出来了,我很欣慰。就在这里记录一下这个知识点,和大家分享。
最初我的代码大概是这样子的:
select a.id, a.name, a.code, b.type, ( select p_name from C c where c.pid = b.pid ) from A a, B b where a.id = b.id and a.id > 1000;
这样的话如果三个表数据量小就没事儿了,一会儿就跑出来了。但是我们的A表上亿,A一个id对应B里的好多个id,那么B的数据量就更大了。C也差不多,这样一来就要老命了。这个时候我想到了用with这个办法来减小数据量。
WITH这个东西主要是产生一个临时的表,可以通过各种条件见小数据量,挑选需要的列,如此这般,数据量就会小很多。WITH没有办法提高效率,但是就是降低数据量,靠硬件的优势。修改以后的代码如下:
with AA as (select id, name, code, type from A where id > 1000), BB as (select type, pid from B), CC as (select p_name, pid from C) select AA.id, AA.name, AA.code, BB.type, C.p_name from AA, BB, CC where AA.id = BB.id and CC.pid = BB.pid;
经过业务上跑了一遍,原本13个小时没有跑出来的过程,居然很快的跑出来了,我很欣慰。就在这里记录一下这个知识点,和大家分享。
相关文章推荐
- 使用WITH提高查询效率
- 使用WITH提高查询效率
- 使用WITH提高查询效率
- oracle优化,hint的使用! (系统自动优化有时不是最好的,我们可以手动添加hint来提高查询效率
- 使用子查询提高MySQL分页效率 limit
- 使用索引统计信息(Index Statistics)优化查询语句,提高查询效率
- [转]使用 Bulk Collect提高Oracle查询效率
- 使用索引统计信息(Index Statistics)优化查询语句,提高查询效率
- 验证使用子查询提高MySQL分页效率
- Oracle批量查询、删除、更新使用BULK COLLECT提高效率
- 使用Bulk Collect提高Oracle查询效率
- 使用NVL代替IS NULL OR IS NOT NULL,提高查询效率
- Improving Developer Productivity with Sculptor,使用Sculptor提高开发效率
- oracle使用with as提高查询效率
- java中使用sql的存储过程,提高查询效率
- 使用MySQL 5.7虚拟列提高查询效率
- Oracle模糊查询之(3.1从使用函数和sql语法角度来提高模糊查询效率 一)oracle模糊查询效率提高
- 使用Bulk Collect提高Oracle查询效率
- Oracle模糊查询之(3.2从使用函数和sql语法角度来提高模糊查询效率 二)ORACLE中Like与Instr模糊查询性能大比拼
- 使用elasticsearch提高hbase基于列的查询效率