尽量让having count(distinct time) >= 3这个条件在GROUP BY以前生效,这样能够过滤掉很多数据,减少GROUP BY 的数据量
解决方案 »
- 程序运行起初没有问题,过几小时后数据库报错,报错信息如下
- oracle自动任务,真心求教
- 如何执行文件
- 删除视图时报错(You need an unconditional ON DELETE DO INSTEAD rule.
- 对某个字段判断的问题
- oracle 如果判断一个Varchar字段是否可转换为number数字类型
- 关于序列的问题。。。。
- 求助!安装了TOAD后就连接不上数据库了
- PL/SQL中有延迟功能吗?
- sql 当我policyno这个字段为空时,把LEVEL1COMDESC这个字段赋值为‘总计’
- 输入日期的变量出现 ora-00904 :"NOV":invalid indentifier ?
- 哪位大牛能指导一下,能不能边进行数据库查询边对返回结果进行处理.比较急,在线等。谢过各位了!
表B小,大概上万的数据。
表A建的索引为time,cid,city这3个索引
表B建的索引为city_code,cid这2各索引
A走的是time上的索引
select count(*)
from TABLEA
where a.time >= 1384444800
and a.time <= 1384963200 的结果是多少?
select count(*)
from TABLEA
where a.time >= 1384444800
and a.time <= 1384963200 的结果是多少?
一天400多万,7天大概2000多万,3000万的样子
这两个有索引吗,CITY_CODE可以做成位图索引
select count(*)
from TABLEA
where a.time >= 1384444800
and a.time <= 1384963200 的结果是多少?
一天400多万,7天大概2000多万,3000万的样子
这个数据量能否想办法降级呢?
比如先在TABLEA上group 你所需要的字段。然后结果再与tableB 关联。
并且应该是选择了你的A表做驱动表,而对于你的驱动表A,oralce会对A进行全扫描,那么你A表
这么大扫起来肯定会慢,事实上应该将你的小表做驱动表,全扫描一次很快,然后基于B的数据,A表上有相应的索引去fetch数据这是正常逻辑,所以方案是:
1.将你的B表作为驱动表,加个hint:/*+ ordered use_nl (B A)*/
2.在你的A表上对相关的连接字段建立合适的索引,最好那个字段是有唯一性或者高选择性