oracle 千万级数据表,全表查询优化时怎样使用临时表

1、oracle 千万级数据表,全表查询优化时怎样使用临时表。
2、使用存储过程查询表中不重复的客户ID,和相关的客户收入。
使用语句如下
select b.*
from dw_kefu_activity_data_m b
where b.rowid = (select max(a.rowid)
from dw_kefu_activity_data_m a
where a.cust_id = b.cust_id)
,但是表数据过多(几千万),效率慢。
求优化,只知道用临时表能优化,但是怎么用不太清楚。查了半天资料,没找到相关内容。
谢谢。。。。 :oops:
[b]问题补充:[/b]
建表语句:
create table DW_KEFU_ACTIVITY_DATA_M
(
STATIS_MONTH VARCHAR2(20),
CUST_ID VARCHAR2(100),
CUST_LEVEL VARCHAR2(10),
YKC_20 NUMBER(20),
YKC_30 NUMBER(20),
YKC_50 NUMBER(20),
YKC_100 NUMBER(20),
YKC_300 NUMBER(20),
YKC_500 NUMBER(20),
AX_CARD NUMBER(20),
AM_CARD NUMBER(20),
AJ_CARD NUMBER(20),
FINALLY_ACCOUNT NUMBER(30,12)
)
查询语句:
select b.*
from dw_kefu_activity_data_m b
where b.rowid = (select max(a.rowid)
from dw_kefu_activity_data_m a
where a.cust_id = b.cust_id)
查询计划不是到是不是下面的(图片test解释计划.jpg):

应为是在本地测试的,所以dw_kefu_activity_data_m里面的数据只是105条,实际数据要多的多大概1千万左右吧。

[b]问题补充:[/b]
没有建索引。。。
对索引不太熟,只大概了解下,数据量大的时候,建索引会增加开销。就没考虑索引。

5个回答

哦。。。。。 试下在cust_id上加个索引看看

参考下
数据库的性能优化
http://www.iteye.com/topic/216078

不知道表结构 没有办法帮你优化. 甚至连查询计划都没给出来。。。。。 谁知道哪有问题。

即使是这种简单的需求也有很多种写法。 自己多试下就知道了.

哪些字段上有索引 还有他们的索引类型是什么?

[quote]对索引不太熟,只大概了解下,数据量大的时候,建索引会增加开销。就没考虑索引[/quote]
是建立索引时有很大的开销,数据量大时,索引要重新整理需要很长的时间,但是建立后,可以增快查询速度,如果数据量的变化小于30%,强烈建立索引。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐