oracle关联三张表查询太慢

oracle中有三张表,都有关联关系的索引,A表关联B表,B表关联C表,从而取出C表中的一些数据,但这样关联后查询速度非常慢,有没有什么办法能快些啊。而且只能用这种形式的sql语句,如下:
select id,name,
(select max(num) from b inner join c on b.Nid=c.Nid where b.id=a.id)
from a 这种语句速度太慢了,有没有什么办法可以改造一下啊。

select a.id,a.name,max(b.num)
from a,b
where a.id = b.id
and exists(
select 1
from c
where b.nid = c.nid
)
group by a.id,a.name,b.num

使用exists可以减少很多次数据关联的次数,试试看,如果满意请加分,谢谢!
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-08
每张表加个索引,查询时就会快一点的。
给COMPANY表加索引PK_COMPANY,COMPANY的主键为COMPANY_ID,TEST_DB为表空间
CREATE UNIQUE INDEX PK_COMPANY ON COMPANY
(COMPANY_ID)
LOGGING
TABLESPACE TEST_DB
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;

ALTER TABLE COMPANY ADD (
CONSTRAINT PK_COMPANY
PRIMARY KEY
(COMPANY_ID)
USING INDEX
TABLESPACE TEST_DB
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
));
第2个回答  2011-03-08
Try this one:
select a.id,a.name, t2.maxNum
from a INNER JOIN (SELECT b.id, max(b.num) AS maxNum from b inner join c on b.Nid=c.Nid GROUP BY b.id) t2
ON a.id = t2.id本回答被网友采纳

oracle使用leftjoin多表关联查询速度慢,怎么优化
使用索引、优化表结构。1、确保涉及关联的字段上有适当的索引。索引可以显著提高查询速度,特别是对于大型表,索引并非越多越好,需要根据实际查询的需求进行选择。2、确保表结构合理,避免冗余数据。这有助于减少数据量,提高查询性能。

ORACLE关联三表视图查询过慢问题,如何解决?
个人认为有两个办法,仅供参考。(1)如果视图并不是需要实时刷新,也就是说可以存在一定的滞后;或者视图基表刷新并不频繁,那么可以考虑物化视图,这样的话,是在后台操作的,当然物化视图一样慢,但是查询的时候感觉不到,除非正好赶上物化视图刷新。(2)改视图为表,每次基表插入新的数据后,统计新...

oracle 多表关联查询速度太慢了 ,求优化。。
1. 查看视图逻辑的执行计划,结合视图在应用中的访问情况,在相关列增加索引 2. 目测sdate,isjm,shoptypeid,sheettype,shoptypeid,costid,costvalue,qty都不知道是哪个表的,补一下引用的别名吧,为了更好的优化效果,建议补充下各表的数据量情况 3. e.dtype、sheettype有条件限制,检查是否可以改写...

oracle 多表查询速度太慢。求帮我优化一下
AND tb_jbjxx. like '东城建国%';如果你想要的是满足任何一个条件就要检索出来的话,那么一定要有一个主表,就是查询主表的所有信息,再用其他表的字段和主表关联,有数据显示,没有数据不显示 分析你的SQL文,我推测tb_ajjbxx表是主表的概率比较高,那么SQL文的修改如下:select jbjxxid,anjianm...

多表关联查询效率就很低,有没有只改SQL的优化方案
多表关联查询效率就很低,有没有只改SQL的优化方案 确实会发生这样的情况,我也有此经历,发生这样的状况是在Oracle数据库下,而查询涉及的一个表的数据量很大,假设为A表,在开始的时候并未带出A的字段,所以查询速度还可以;后来查询带上A表的一个字段,执行很久没有结果。从执行计划中可以看到,...

oracle多表联合查询作为一张视图,查询速度超~级~慢~的,怎么办?_百度...
另外连接条件的先后顺序也很重要。那个连接条件可以过滤掉不符合条件的数据那个字段连接条件应该在最后。如果数据量比较大,而且对数据的实时性要求不高,那么建议用oracle的物化视图来做。物化视图是介于普通视图和表之间的一种oracle专有对象,物化视图会将查询的数据缓存起来,同时可以对物化视图进行修改、...

(oracle)子查询和关联查询效率问题
Oracle有自动优化查询的能力,但有时候会把查询计划优化的一塌糊涂,反而超级慢。如果你用的客户端是PLSQL Developer,可以用F5查看执行计划。你第一个语句慢的原因,可能是执行计划出乎你的预料。有时候,用临时表存储临时数据,把一个超级复杂的SQL拆分成几个,效率要高很多倍。

oracle 对于多个大表关联操作如何优化速度?
5、必要时候使用存储过程。提升30%-40%的速度 6、建议你分页读取不要一下读完所有的数据。(使用rownum),一下子数据太多会使得内存不够用的。如果这些都做了还不满意的话,可以考虑建立几个表空间,然后按照一个算法将各个表的数据,平均的放在各个表空间内(分表分区),在select的时候数据库就会...

如何提高oracle的查询速度
Oracle默认优化模式是CHOOSE,在这种情况下,如果表没有经过分析,经常导致查询使用全表扫描,而不使用索引。这通常导致磁盘I\/O太多,而导致查询很慢。如果没有使用执行计划稳定性,则应该把表和索引都分析一下,这样可能直接会使查询速度大幅提升。分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令。对于少于...

oracle想把三张表关联起来,怎么关联
例如,在示例中,我们有三个表:学生表(student)、成绩表(score)和班级表(class)。通过以下SQL语句,我们可以关联这三个表:SELECT a.*, b.*, c.* FROM student a LEFT JOIN score b ON a.id=b.score_id LEFT JOIN class c ON a.id=c.class_id ...

相似回答