有两张表,一张表table1(id char(15),name_id float(126),name(50))
有2000多条记录,另一张表table2(id char(15),rq1 date,rq2 date)
有30000多条记录.现想实现在表table2中查找table2.id=table1.id 且rq1<=rq2,
并按name_id 分组的记录数,表table1中id为主键唯一,而table2中的id 不唯一,
我用以下查询,却需用一个多小时,请高手看看我的SQL是不是有什么问题,有没有
更好的办法?
select to_char(a.name_id),count(*)
from table1 a, table2 b
where a.id=b.id
and b.rq1<=b.rq2
group by to_char(a.name_id)
有2000多条记录,另一张表table2(id char(15),rq1 date,rq2 date)
有30000多条记录.现想实现在表table2中查找table2.id=table1.id 且rq1<=rq2,
并按name_id 分组的记录数,表table1中id为主键唯一,而table2中的id 不唯一,
我用以下查询,却需用一个多小时,请高手看看我的SQL是不是有什么问题,有没有
更好的办法?
select to_char(a.name_id),count(*)
from table1 a, table2 b
where a.id=b.id
and b.rq1<=b.rq2
group by to_char(a.name_id)
解决方案 »
- 已导入另一台机子上的数据库,但查询仍只有原来的
- sql*loader 导入选定的记录
- oracle安装完后不能进行管理工作
- 增加了on delete cascade级联删除 ,现在想撤销如何做?
- 50分求一个oracle存储过程
- declare 请问下提示第3行第7列select没有into
- 存储过程里使用绑定变量的问题
- 关于新创建用户的是否存在默认权限的问题
- sql问题
- Jdeveloper为什么连接oracle9i,连不上?有人确信能连接也给分,遇到过同样问题的也给分,最好能够解决问题。
- 非高手勿入:全外连接
- oracle9i 有三张光盘,安装到百分之60的时候就过不去了, 换机器还是这样. 谢谢帮助!
1.首先请确认表中的id列都有索引? 表是否已经统计过?
输出查询计划看看 ? 2. sql语句中有显式的函数出现,而且group by 操作中
也有函数操作,会导致full table scan. 3. 增大排序缓冲区看看?
alter sort_area_size=1048576(1M)
...
因为oracle的解析sql过程是从右往左,所以数据少的表应作为基表
其他修改可以建立索引等
同意2楼的说法,不过对1楼的使用to_char感到迷惑,
这个to_char好象没什么用啊
create index i_tab1_id on tab2 (table1);select name_id ,count(1) from table2 where id
in (select id from table1 )
group by id_name
rule 模式下的规则:1、有两个索引存在的情况下,from后面大表在前。小表(返回记录少的表,不是记录少的表)在最后,作为驱动表,Oracle处理SQL语句是从左到右2、有一个索引,则顺序无关3、都没有索引,则大表应该在后