尽量让having count(distinct time) >= 3这个条件在GROUP BY以前生效,这样能够过滤掉很多数据,减少GROUP BY 的数据量
解决方案 »
- sql 联表查询1000万条数据 有没有什么好的办法
- 自定义oracle聚合函数问题。
- 关于建立索引失败(顶者有分)
- 如何连接远程Oracle数据库?
- 求SQL
- 简单的sql查询问题,急~~!
- ORA-01503 :CREATE CONTEROLFILE???求助!
- 在oracle中如何查看一条纪录是何时插入或修改的呢?
- 有数据的字符型转换成可能大于4000的数据类型应该怎样去转换呢!
- 大侠求助如何拯求我移动硬盘及数据
- 输入日期的变量出现 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表上对相关的连接字段建立合适的索引,最好那个字段是有唯一性或者高选择性