select count(distinct a.nlyzxmbh) as c_xm,sum(isnull(a.zgrs,0)) as sum_zgs,sum(isnull(gzze,0)) as sum_gzze,sum(isnull(lrze,0)) as sum_nlr,sum(isnull(sj,0)) as sum_nsj,sum(isnull(zjz,0)) as sum_zjz,sum(isnull(a.cz,0)) as sum_ncz,sum(isnull(a.swfcz,0)) as sum_htyz from t_neilianyinzi a where 1=1 and a.nlyzxmbh in ( select a.nlyzxmbh from v_neilianyinzi a where 1=1 and a.tj='省级已审核' and 1=1 and 1=1 and 1=1 and a.dwzjrq>='2010-05-01' and a.dwzjrq <='2008-06-31' group by a.nlyzxmbh having sum(isnull(a.td,0)+isnull(a.tjs,0)+isnull(a.sb,0)+isnull(a.ldjqt,0))>0 )我想这里主要是有一个in操作符,
但我不知道该如何来优化。因为这个in中的结果集有时会上万。
如果要实现t_neilianyinzi.nlyzxmbh =v_neilianyinzi.nlyzxmbh是不是会快些,但这个怎么实现呢。
但我不知道该如何来优化。因为这个in中的结果集有时会上万。
如果要实现t_neilianyinzi.nlyzxmbh =v_neilianyinzi.nlyzxmbh是不是会快些,但这个怎么实现呢。
解决方案 »
- 请大家帮帮我关于T-SQL的问题!
- 求一变量使用问题。
- 同样的查询,为什么用SA查询速度很快,用一个普通用户就明显慢?
- 全文索引按某字段排序问题
- 100分 求助统计
- 组合查询
- 游标问题???奇怪的distinct 关键字???
- 数据接口
- 怎样使SQL Server 2000中新增加的用户,不能远程登录数据库(并不允许其对数据库有操作权限)
- 如何在查询分区视图时使用指定的基表索引?!
- 一条SQL语句是不是默认为一个事务
- 在A表中设置了主键ID为自动增量,为防止有二个以上用户同时插入记录,"Insert into TB WITH (ROWLOCK) (col1,col2) values (@col1,@col2)",
这个如何处理,不能放在外面来吧。
FROM T1
INNER JOIN (
SELECT ...
WHERE ... --这里的条件加索引
GROUP BY ... --这里加索引
) T2 ON T1.ID1=T2.ID2 --这里加索引
count(distinct a.nlyzxmbh) as c_xm,
sum(isnull(a.zgrs,0)) as sum_zgs,
sum(isnull(gzze,0)) as sum_gzze,
sum(isnull(lrze,0)) as sum_nlr,
sum(isnull(sj,0)) as sum_nsj,
sum(isnull(zjz,0)) as sum_zjz,
sum(isnull(a.cz,0)) as sum_ncz,
sum(isnull(a.swfcz,0)) as sum_htyz
from t_neilianyinzi a
where 1=1 and a.tj='省级已审核' and a.dwzjrq>='2010-05-01' and a.dwzjrq <='2008-06-31'
and (select sum(isnull(a.td,0)+isnull(a.tjs,0)+isnull(a.sb,0)+isnull(a.ldjqt,0))
from t_neilianyinzi where nlyzxmbh=a.nlyzxmbh)>0--或者
select
count(distinct a.nlyzxmbh) as c_xm,
sum(isnull(a.zgrs,0)) as sum_zgs,
sum(isnull(gzze,0)) as sum_gzze,
sum(isnull(lrze,0)) as sum_nlr,
sum(isnull(sj,0)) as sum_nsj,
sum(isnull(zjz,0)) as sum_zjz,
sum(isnull(a.cz,0)) as sum_ncz,
sum(isnull(a.swfcz,0)) as sum_htyz
from t_neilianyinzi a
where 1=1 and a.tj='省级已审核' and a.dwzjrq>='2010-05-01' and a.dwzjrq <='2008-06-31'
and exists(select 1
from t_neilianyinzi
where nlyzxmbh=a.nlyzxmbh
and (td>0 or tjs>0 or sb>0 or ldjqt>0)
)
t_neilianyinzi.nlyzxmbh上加索引;
优化内部子查询:
v_neilianyinzi.tj和v_neilianyinzi.dwzjrq上加索引;
v_neilianyinzi.nlyzxmbh上有聚集索引更好。
如果v_neilianyinzi是视图的话,检查视图的语句是否需要优化。
v_neilianyinzi a
这两个地方最好不要用同样的别名,容易出错。
数据库服务器在本机还是远程,使用上都没有区别,都要用客户端去连。
只要你能用Management Studio或查询分析器连上去,该看到的都能看到。