易截截图软件、单文件、免安装、纯绿色、仅160KB

oracle 查询优化的问题 - Oracle / 开发

一张销售事实表,一年1亿多条记录,有一个时间的维度表,里面有sale_date,month,week。现在想汇总每个月的销售额
sql:

select sale_month, sum(sale_money) from sales,times 
where sales.sale_time = times.sale_time and sales.sale_time > to_date('20100101','yyyymmdd') 
group by sale_month

sales表,times表上分别在sale_date 建立了一个索引。

现在的问题是,由于用到了times表中的sale_month分组,sales会被全表扫描,效率不高。请问应该如何优化?
谢谢

物化视图不考虑

ORACLE版本?

sales.sale_time > to_date('20100101','yyyymmdd')数据占整个表比例如何?


如果是10g,ORACLE应该会选择最优CBO获取执行计划。

走索引不一定就一定快,若你想强制走索引,用hint试试,比较俩执行计划,哪个更优。

在sale_time上有分区表,每年一个分区。 我是说如果从数据库表设计角度看,还可以优化么?这么点的数据量很多数据仓库都会遇到吧,看来真要用物化视图+dimension ?

引用
在sale_time上有分区表,每年一个分区。 我是说如果从数据库表设计角度看,还可以优化么?这么点的数据量很多数据仓库都会遇到吧,看来真要用物化视图+dimension ?


我们这边的处理方法 

 对于有些不是 非常大的表 一般采用 用月 进行分区 比如账单 之类的  
对于很大的表(一天300W+ 数据 保存1年多的 ) 采用 月分区加日分区 (术语不清楚 subpartition) 不知道 对楼主有么有用 


谢谢楼上的,分区表可以自动创建么?比如新的一个月来了之后,用代码


相关问答:

oracle与aix - Oracle / 高级技术

在系统运行的时候总是有一块磁盘始终闪红灯,进入系统后
#topas查看总是有一块磁盘%BUSY为90%以上,
数据库版本:oracle 9.2.0.7 
数据文件挂载的节点:/oradata/pcs/ 逻辑卷号lv04 
#lslv -l lv04 ......

oracle 10g data guard - Oracle / 基础和管理

做玩data guard 后
在Primary服务器 执行 
SQL>SELECT SEQUENCE#,APPLIED from V$ARCHIVED_LOG ORDER BY SEQUENCE#;
 SEQUENCE# APP
---------- ---
  13 NO
  13 YES ......

oracle 如何调用mssql存储过程 - Oracle / 高级技术

oracle 通过BDlink 连接到一台MS SQL,查询都可以,但是不知道如何在oracle通过DBLink调用MS SQL的存储过程,求解~谢谢~
引用
oracle 通过BDlink 连接到一台MS SQL,查询都可以,但是不知道如何在oracle通过DBLink调用M ......

Oracle用户名 - Oracle / 基础和管理

Oracle中用户名是什么?
描述清楚一点!
ORACLE数据库中有很多内置的用户名,sys就不说了,还有scott密码是tiger.除了sys,其他用户都是所定的,解除锁定后才能使用。在本机登陆数据库时,sys的密码可以随意输入。 ......

关于SQL语句OR的问题 - Oracle / 高级技术

通过NAME字段条件查询一个数据表,假设我有100个姓名,有以下两个方法,
方法1:
把100个Name 组成一个SQL语句,比如 Select * from tmp_table where Name='张三' or Name ='李四' Or ...Or Name='第一百个姓名'
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号