Union 后执行速度变慢!
我有一个SQL语句,结构是这样的
select field1, field2,field3
from view1
where field4 = @parameter
union
select field1, field2,field3
from view2
where field4 = @parameter
以前执行一直都没有问题,速度很快,1-2秒,但昨天开始突然变慢,要执行13秒,我查了一下,第一,第二部分执行都只要1秒,但union后却要13秒。我想不出有什么理由,也不知道怎么去改。
问题点数:50、回复次数:19Top
1 楼zjcxc(邹建)回复于 2005-04-21 14:52:47 得分 0
1.重建view
2.将union 改为 union all,看看速度Top
2 楼robertzy()回复于 2005-04-21 15:01:09 得分 0
1怎么叫重建view, 我没改view.
2.union all 一样
多谢,还有什么原因,我实在想不通,什么也没变,突然就慢下来了。
Top
3 楼zjcxc(邹建)回复于 2005-04-21 15:07:43 得分 10
view1
这个是视图还是表,如果说视图,则要重建,如果是表,则用dbcc checktable('view1')松果Top
4 楼zjcxc(邹建)回复于 2005-04-21 15:08:22 得分 0
松果 --> 检查Top
5 楼robertzy()回复于 2005-04-21 15:39:57 得分 0
view1, view2 都是视图。 重建会有什么不同?Top
6 楼robertzy()回复于 2005-04-21 15:48:34 得分 0
view1, view2 都有3层,其中也有union。但我想知道到底什么原因诱发了这样的改变,如果不知道原因,那以后就不能避免这样的事情发生,总要等到发生后再找原因,这样就耽误时间了。我看了一下执行计划,好像都用到了该用的索引,没什么问题,就这最后一步出了问题。Top
7 楼devclub(OSen)回复于 2005-04-22 09:03:18 得分 10
你建立一个view就可以了,也可以是一个SP,虽然Microsoft语法上是存在Union,但是它要求两个表的列数要相同,同时列的类型也要一致,这样就需要扫描,速度你说会快嘛?
还有你说执行一条本来只是需要1S,其实数据量不是很大的话,1S已经可以致命了,说明你得语句肯定是效率不高,所以我建议你建立好index,以便加速查询速度.Top
8 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2005-04-22 13:48:49 得分 10
將union改為union all看一下怎么樣Top
9 楼aspcom(牧野流星)回复于 2005-04-25 15:09:13 得分 10
1-2秒速度也算很快?楼主确信索引都建好了吗?
最好不要用union,看看表结构的设计,有没有可以修改的地方Top
10 楼robertzy()回复于 2005-04-25 16:08:04 得分 0
1-2秒是不好,但我现在不是这个问题,我可以以后再改,但现在是union后有问题,1+1 =13。我想搞明白我忽略了什么,
索引该建得我都建了,我的数据源有>5millions的数据,所以不是索引的问题,否则没法查询。
同意
“但是它要求两个表的列数要相同,同时列的类型也要一致,这样就需要扫描,速度你说会快嘛?”
忘说了,我的结果集倒不大,第一,第二部分只返回1-2条结果,所以总共只有2-3条返回。我想union扫描也不应该花太多时间。
其实我的问题是:
为什么原来执行正常的视图突然会变慢?
Top
11 楼robertzy()回复于 2005-04-25 16:13:45 得分 0
“其实我的问题是:
为什么原来执行正常的视图突然会变慢?“
这个好像不准确,我也搞不情到底哪是问题。Top
12 楼chenqianlong(443)回复于 2005-04-27 08:49:33 得分 10
樓主,我幫你頂,找到原因帖出來啊.Top
13 楼yeshu(夜鼠)回复于 2005-04-27 13:06:48 得分 0
我建议你重新考虑建立 聚合索引
Top
14 楼robertzy()回复于 2005-04-27 14:08:43 得分 0
建聚合索引也不行Top
15 楼chichunhua(無愧與心)回复于 2005-04-28 14:04:03 得分 0
用exist試試Top
16 楼robertzy()回复于 2005-04-28 15:15:52 得分 0
怎么用exist试Top
17 楼whb963(ddd)回复于 2005-04-28 15:30:08 得分 0
用DBCC INDEXDEFRAG 和 DBCC REINDEX 查一下索引 ,
Top
18 楼windermar(若风)回复于 2005-05-11 18:22:58 得分 0
还有一个可能的原因,那就是内存不够了。再加一倍内存试一下。Top
19 楼devclub(OSen)回复于 2005-07-14 11:04:26 得分 0
用临时表看看把Top




