日期:2014-05-17  浏览次数:20577 次

求高手关于两个表连接优化的问题,执行需要30分钟以上.
本帖最后由 zhaowei303 于 2013-09-19 11:11:20 编辑
描述:
表A有20多万条记录,30多个字段,表B有8万多条记录20多个字段.
通过关连条件得到新表C.
大概是这样,下面是我的SQL的语句,

declare @value int 
select @value = select aa from table1 where xyc = 'abc'

SELECT a.*,b.h1+b.h2 as h,b.xyc,b.ccz,b.xdd,b.yyc
INTO fees3
FROM fees a,fees2 b
where a.xx = b.xx and a.yy = b.yy and a.zz = b.zz
and (b.h1+b.h2) >= datediff(s,-@value,a.hh) and (b.h1+b.h2) < datediff(s,@value,a.hh)

执行起来,性能非常的慢,我分别在两张表上建聚集索引(xx,yy,cc字段),都很慢在30分钟以上.我也试过先不用最后的大于和小于条件直接插入表,然后再到表中进行比较筛选更慢.
请问有没有好的优化的方法.先谢谢了.

------解决方案--------------------
不知道你的表怎么设计的,感觉有点太慢了!

如果可以的话,在B表上建个h1+h2的计算列,然后给这个列加索引,试试。
------解决方案--------------------
引用:
Quote: 引用:

sql优化空间实在有限的话,建议把结果做成索引视图,不用每次都去关联查询


索引视图什么意思,要怎么操作呢。在xx,yy,zz上建聚集索引都会慢。


视图你知道吧,视图只是即时的通过sql去查询一个结果

索引视图就是把这个查询结果固化起来,类似于专门用一个表,存储你组织后的数据