sql查询增加一个查询条件后速度变慢,怎么样优化? 10
SELECTDISTINCTbl.id,bl.key_name,bl.city_id,bl.kind,bl.station_countsFROMshannxi.dbo.b...
SELECT DISTINCT
bl.id,
bl.key_name,
bl.city_id,
bl.kind,
bl.station_counts
FROM
shannxi.dbo.bus_line bl
INNER JOIN shannxi.dbo.bus_station bs ON bl.busid = bs.bus_id
--AND bl.isdisplay = 0
INNER JOIN (
SELECT
bsn.id,
bsn.station_name,
bsn.kind,
bsn.lat,
bsn.lng
FROM
t_scheme sc
INNER JOIN t_schememedia sm ON sc.id = sm.schemeid
AND sc.provinceId = 27
AND sc.mediaparentid = 6
AND sc.id = 4
INNER JOIN shannxi.dbo.bus_station_new bsn ON bsn.id = sm.projectid
) ss ON bs.station_name = ss.station_name
AND bs.kind = ss.kind
AND ABS(bs.lat - ss.lat) < 0.05
AND ABS(bs.lng - ss.lng) < 0.05
ORDER BY
bl.station_counts ASC
增加AND bl.isdisplay = 0这个条件速度就变得比较慢,去掉速度很快
刚才发现其实没啥问题,在别人电脑上都嗖嗖的,郁闷,就这样了 展开
bl.id,
bl.key_name,
bl.city_id,
bl.kind,
bl.station_counts
FROM
shannxi.dbo.bus_line bl
INNER JOIN shannxi.dbo.bus_station bs ON bl.busid = bs.bus_id
--AND bl.isdisplay = 0
INNER JOIN (
SELECT
bsn.id,
bsn.station_name,
bsn.kind,
bsn.lat,
bsn.lng
FROM
t_scheme sc
INNER JOIN t_schememedia sm ON sc.id = sm.schemeid
AND sc.provinceId = 27
AND sc.mediaparentid = 6
AND sc.id = 4
INNER JOIN shannxi.dbo.bus_station_new bsn ON bsn.id = sm.projectid
) ss ON bs.station_name = ss.station_name
AND bs.kind = ss.kind
AND ABS(bs.lat - ss.lat) < 0.05
AND ABS(bs.lng - ss.lng) < 0.05
ORDER BY
bl.station_counts ASC
增加AND bl.isdisplay = 0这个条件速度就变得比较慢,去掉速度很快
刚才发现其实没啥问题,在别人电脑上都嗖嗖的,郁闷,就这样了 展开
1个回答
2016-06-30
展开全部
你的这个查询要优化的地方不是not in, 而是整个查询的结构: 使用了太多的子查询,而且都是查找的相同的表(GISDUCT表查询4次),这肯定不是好的查询方法,应该把你要达到的目的再思考,转化成合适的查询语句。
个人认为,你算OCCUPYCOUNT和TOTALCOUNT的子查询应该可以在一个查询中搞定的,因为都是查询GISDUCT表,只是统计取值的条件有所不同罢了,而按条件统计可以用类似“case when 条件 then count(xxx) else 0 end”的结构来实现。有问题可再讨论。
个人认为,你算OCCUPYCOUNT和TOTALCOUNT的子查询应该可以在一个查询中搞定的,因为都是查询GISDUCT表,只是统计取值的条件有所不同罢了,而按条件统计可以用类似“case when 条件 then count(xxx) else 0 end”的结构来实现。有问题可再讨论。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询