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 的问题

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-06-12
问题很可能出在这一句:
AND P.MEDIATYPEINFOID IN (SELECT ID FROM FN_GET_MEDIATYPE_INFOR(5)).
这个FN_GET_MEDIATYPE_INFOR里面的逻辑复杂吗?追问

跟这个没多大关系,主要是这三个二货表bus_line ,bus_station ,bus_station_new ,,公交线路经过的商圈,得通过它的站点来确定,然后又要跟媒体表,商圈表关联,所以很扯淡

追答

就这几张表关联,索引都加好了的话,一般的数据量不可能会这么慢.
这样,你把我说的那个条件注释掉,试一下用多久可以查出来.

追问

去掉一样,应该是那几张表的条件要不停做对比,耗时太久,每个表里面本里就上万条数据,几个表这样对比下来效率自然太慢

sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化
确定是菜鸟,sql 写成这样 证明你逻辑很清楚啊,建议如果是初学者,代码规范一定要保持 不知道代码规范,可以去窗口format一下。。。言归正传 你这个优化的话 可以把 AND p.mediatypeinfoid in (select id from fn_get_mediatype_infor(5))上面这部分 换成 inner join ...

谁知道acer电脑BIOS设置里的英文祥细解释下
一般上CPU的外频在100至250左右较为正常,一般不会超过300MHz,所以用户千万不要一次性把外频调到最高,原则上来讲,第一次超频CPU因为不清楚CPU究竟可以在多高的外频下工作,因此设置外频的数值可以以三至五兆赫兹为台阶提高来慢慢试验,在此为了示范,直接将外频设置成了133MHz这个标准外频,设置了正确的外频数字以后再按...

相似回答