最近给一家公司做一个oracle数据库的检索功能select count(*) as zs,su.subjectname from ISTIC_Data_CSTPCD_Article ar,ISTIC_Dic_SubjectCode su,ISTIC_Data_CSTPCD_Citation ci
where ar.xk=su.SUBJECTCODE and ar.pdfurl=ci.zz1
group by su.subjectname 相信大家对这个sql语句并不陌生吧,该语句是三个表的连接查询,三个表的数据量分别为3405497,53,7727297。
其实我一开始只是对前两个表做连接查询,大概用了七秒钟就出现了结果。但是当将第三个表也连接上的时候,这个sql语句整整运行了一天也没运行出结果,我知道肯定很慢,但没想到会这么慢,希望各位高手指点,如何能过提高该sql语句的执行效率!
where ar.xk=su.SUBJECTCODE and ar.pdfurl=ci.zz1
group by su.subjectname 相信大家对这个sql语句并不陌生吧,该语句是三个表的连接查询,三个表的数据量分别为3405497,53,7727297。
其实我一开始只是对前两个表做连接查询,大概用了七秒钟就出现了结果。但是当将第三个表也连接上的时候,这个sql语句整整运行了一天也没运行出结果,我知道肯定很慢,但没想到会这么慢,希望各位高手指点,如何能过提高该sql语句的执行效率!
这两个字段建个索引试试
select count(*) as zs,su.subjectname from ISTIC_Data_CSTPCD_Article ar,ISTIC_Dic_SubjectCode su,ISTIC_Data_CSTPCD_Citation ci
where ar.pdfurl=ci.zz1 and ar.xk=su.SUBJECTCODE
group by su.subjectname 试试
select count(*) as zs,t1.subjectname FROM ISTIC_Data_CSTPCD_Citation ci ,t1
WHERE t1.pdfurl=ci.zz1
group by t1.subjectname
Alter table table_name move;
Alter index index_name rebuild;
Alter trigger trigger_name compare;
查询条件把能过滤掉大量数据的条件放最后
简言之,多表连接表顺序从多到少,where条件 按过滤量从少到多