日期:2014-05-18  浏览次数:20473 次

请教一条sql语句的优化??
select 编号,日期,单价,合计

from 商品供销统计 where jzrq >= '2011-7-1' and jzrq < '2012-1-1' and

编号 in (select 编号 from 商品信息 where 店面编号 in

(select 店面编号 from 店面信息 where 城市代码=1))

order by 编号,日期

以上语句的目标是要查询某个城市的所有商品销售和供货情况,由于数据量巨大,执行时间要20多秒,我将两个"in"改成“exists”后结果输出了所有城市的商品供销记录,速度却比没改之前还快。。请问大大们有更好的查询方式吗?

------解决方案--------------------
SQL code
select a.编号,a.日期,a.单价,a.合计

from 商品供销统计 a,商品信息 b,店面信息 c
where a.jzrq >= '2011-7-1' and a.jzrq < '2012-1-1' 
      and a.编号=b.编号 and b.店面编号=c.店面编号 and c.城市代码=1
order by a.编号,a.日期

------解决方案--------------------
试试:
SQL code
select a.编号,a.日期,a.单价,a.合计
from 商品供销统计 a inner join 商品信息 b on a.编号=b.编号
inner join 店面信息 c on b.店面编号=c.店面编号
where a.jzrq >= '2011-7-1' and a.jzrq < '2012-1-1' and c.城市代码=1
order by 编号,日期

------解决方案--------------------
SQL code
select
 a.编号,a.日期,a.单价,a.合计
from
 商品供销统计 a join 商品信息 b on a.编号=b.编号 join 店面信息 c on b.店面编号=c.店面编号
where
 a.jzrq >= '2011-7-1' and a.jzrq < '2012-1-1' and c.城市代码=1
order by
 a.编号,a.日期

------解决方案--------------------
SQL code
select a.编号,a.日期,a.单价,a.合计
from 商品供销统计 a inner join 商品信息 b on a.编号=b.编号
inner join 店面信息 c on b.店面编号=c.店面编号
where a.jzrq >= '2011-7-1' and a.jzrq < '2012-1-1' and c.城市代码=1
order by a.编号,a.日期