sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化
SELECTCOUNT(DISTINCTsv.id)ascount,m.mediatypename,s.nameFROMt_projectp,shannxi.dbo.bu...
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
展开
2个回答
展开全部
确定是菜鸟,sql 写成这样 证明你逻辑很清楚啊,建议如果是初学者,代码规范一定要保持
不知道代码规范,可以去窗口format一下。。。
言归正传 你这个优化的话 可以把
AND p.mediatypeinfoid in (
select
id
from
fn_get_mediatype_infor(5)
)
上面这部分 换成 inner join
不知道代码规范,可以去窗口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里面的逻辑复杂吗?
AND P.MEDIATYPEINFOID IN (SELECT ID FROM FN_GET_MEDIATYPE_INFOR(5)).
这个FN_GET_MEDIATYPE_INFOR里面的逻辑复杂吗?
更多追问追答
追问
跟这个没多大关系,主要是这三个二货表bus_line ,bus_station ,bus_station_new ,,公交线路经过的商圈,得通过它的站点来确定,然后又要跟媒体表,商圈表关联,所以很扯淡
追答
就这几张表关联,索引都加好了的话,一般的数据量不可能会这么慢.
这样,你把我说的那个条件注释掉,试一下用多久可以查出来.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询