sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化相关的知识,希望对你有一定的参考价值。
SELECT COUNT(DISTINCT sv.id) as count, m.mediatypename, s.name FROM t_project p, shannxi.dbo.bus_line sv, shannxi.dbo.bus_station bs, shannxi.dbo.bus_station_new bsn, shannxi.dbo.t_surround_value_report ss, shannxi.dbo.t_surround_district s, t_mediatype_infor m WHERE p.isdelete=0 AND p.companyid = 2248 AND p.regionid = 354 AND p.dataid = sv.id AND p.mediatypeinfoid=m.id AND p.mediatypeinfoid in ( select id from fn_get_mediatype_infor(5) ) AND sv.busid=bs.bus_id AND bsn.station_code = bs.station_code AND bs.station_name=bsn.station_name AND bsn.kind=bs.kind AND bsn.id = ss.projectid AND ss.datatype=8 AND ss.dataid = s.id GROUP BY m.mediatypename, s.name
确定是菜鸟,sql 写成这样 证明你逻辑很清楚啊,建议如果是初学者,代码规范一定要保持不知道代码规范,可以去窗口format一下。。。
言归正传 你这个优化的话 可以把
AND p.mediatypeinfoid in (
select
id
from
fn_get_mediatype_infor(5)
)
上面这部分 换成 inner join追问
跟这个关系不大,当初就是为了更好查询才写的这个函数select id from fn_get_mediatype_infor(5)
追答多表关联禁用 in () 。。。
这个会降低效率,你可以查查执行计划
不是说你的函数的问题 是 in 的问题
AND P.MEDIATYPEINFOID IN (SELECT ID FROM FN_GET_MEDIATYPE_INFOR(5)).
这个FN_GET_MEDIATYPE_INFOR里面的逻辑复杂吗?追问
跟这个没多大关系,主要是这三个二货表bus_line ,bus_station ,bus_station_new ,,公交线路经过的商圈,得通过它的站点来确定,然后又要跟媒体表,商圈表关联,所以很扯淡
追答就这几张表关联,索引都加好了的话,一般的数据量不可能会这么慢.
这样,你把我说的那个条件注释掉,试一下用多久可以查出来.
去掉一样,应该是那几张表的条件要不停做对比,耗时太久,每个表里面本里就上万条数据,几个表这样对比下来效率自然太慢
java 多表联查sql语句效率问题
select
---1
decode(Scope,'2','大型企业','3','中型企业','4','小型企业','5','微型企业',''),
--2
(SELECT nvl(COGNRESULT, nvl(COGNRESULT3,COGNRESULT4))
FROM EVALUATE_RECORD ER
WHERE ER.OBJECTTYPE = 'Customer'
AND ER.EVALUATEPERIOD = '01'
AND ER.EFFFLAG = '1'
and ER.INVALIDATEDATE > to_char(sysdate,'yyyy/mm/dd')
and ER.Objectno = ei.customerid and rownum = 1),
---3
(select decode(max(classifyresult),'A1','正常类1','A2','正常类2','B1',
'关注类1','B2','关注类2','B3','关注类3','C1','次级类1','C2','次级类2',
'D','可疑','E','损失','') from
cl_info cl where
classifyresult is not null and cl.customerid=ei.customerid)
from ent_info ei,customer_info ci where ei.customerid=ci.customerid and ci.customertype<>'0107'
这个sql语句查出3个字段,因为第三个字段查的表cl_info和ent_info是多对一关系靠customerid关联,导致整体效率变慢,去掉它就很快,不能用视图,索引也有不用想另外建,想提高效率怎么办
因为是给外围系统供数所以不能再另外加表,原表结构也不能变,存储过程不能用,甚至function都不能
以上是关于sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化的主要内容,如果未能解决你的问题,请参考以下文章
结合真实的测试实例,记录一次SQL语句辅助功能测试的场景(包含多表联查及子查询)