select distinct i.买家会员名 from items09to11 i
join product09to11 p
on i.订单编号 = p.订单编号
where i.订单状态 = '交易成功'
and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3
and p.订单状态 = '交易成功'
and p.zid != '101204'
and i.买家会员名 not in(
select distinct i.买家会员名 from items09to11 i
join product09to11 p
on i.订单编号 = p.订单编号
where i.订单状态 = '交易成功'
and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3
and p.订单状态 = '交易成功'
and p.zid = '101204')查询速度30秒,数据量不大,items09to11 10万行,product09to11 15万行
zid字段一共800行,是商品代码,就是这个'101204'很慢,用其他的商品代码查询速度正常,不到1秒就出来了
请问什么问题??把这个'101204'换个随便名字,比如'bbb',就正常了
还有,我的查询目的是得到2011年3月,没有买商品 '101204'的人,有没有比上面代码简单点的,请高手赐教,
join product09to11 p
on i.订单编号 = p.订单编号
where i.订单状态 = '交易成功'
and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3
and p.订单状态 = '交易成功'
and p.zid != '101204'
and i.买家会员名 not in(
select distinct i.买家会员名 from items09to11 i
join product09to11 p
on i.订单编号 = p.订单编号
where i.订单状态 = '交易成功'
and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3
and p.订单状态 = '交易成功'
and p.zid = '101204')查询速度30秒,数据量不大,items09to11 10万行,product09to11 15万行
zid字段一共800行,是商品代码,就是这个'101204'很慢,用其他的商品代码查询速度正常,不到1秒就出来了
请问什么问题??把这个'101204'换个随便名字,比如'bbb',就正常了
还有,我的查询目的是得到2011年3月,没有买商品 '101204'的人,有没有比上面代码简单点的,请高手赐教,
select distinct i.买家会员名
from items09to11 i join product09to11 p on i.订单编号 = p.订单编号
where i.订单状态 = '交易成功' and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3 and p.订单状态 = '交易成功'
and p.zid != '101204'
--你后面那段not in根本没用,直接去掉,然后year和month用不到索引,改如下方式
select distinct i.买家会员名 from items09to11 i join product09to11 p
on (i.订单编号=p.订单编号)
where p.订单状态='交易成功' and p.zid!='101204' and i.订单状态='交易成功'
and i.订单创建时间>='2011-3-1' and i.订单创建时间<'2011-4-1'
where i.订单状态 = '交易成功'
and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3
and not exists(select 1 from product09to11
where 订单编号=i.订单编号 and zid='101204' and 订单状态 = '交易成功')
on (i.订单编号=p.订单编号)
where p.订单状态='交易成功' and p.zid!='101204' and i.订单状态='交易成功'
and i.订单创建时间>='2011-3-1' and i.订单创建时间<'2011-4-1'
select distinct i.买家会员名 from items09to11 i join product09to11 p
on (i.订单编号=p.订单编号 and i.订单状态=p.订单状态)
where i.订单创建时间>='2011-3-1' and i.订单创建时间<'2011-4-1'
and p.订单状态='交易成功' and p.zid!='101204'
select i.买家会员名,p.zid
from items09to11 i join product09to11 p on i.订单编号 = p.订单编号
where i.订单状态 = '交易成功' and YEAR(i.订单创建时间)= 2011
and MONTH(i.订单创建时间)= 3 and p.订单状态 = '交易成功'
)
select distinct 买家会员名 from cte a
where not exists(select 1 from cte where 买家会员名=a.买家会员名 and zid<>'101204')
--have a try
;with cte as(
select i.买家会员名,p.zid from items09to11 i join product09to11 p
on (i.订单编号=p.订单编号 and i.订单状态=p.订单状态)
where i.订单创建时间>='2011-3-1' and i.订单创建时间<'2011-4-1' and p.订单状态='交易成功'
)
select distinct 买家会员名 from cte a where not exists(
select 1 from cte where 买家会员名=a.买家会员名 and zid='101204'
)