2010-10-05 41 views
8

所以我(仍然)经历了一些缓慢的遗留SQL视图,用于计算某些(有时)大型数据集上的平均值和标准偏差。我最终会加入意见加入意见等SQL查询,执行计划和“并行性”

所以我虽然我会审查我的查询执行计划。它立即建议缺少索引,然后我执行。但它仍然难以忍受(如此之慢,以至于VB6应用程序查询数据的时间太慢))

因此,在进一步研究执行计划时,我看到最多的成本(每个成本大约为8%)是“幻灯片”案件。主要是“分配流”和“重新分配流”。这些是什么?

+1

几年前,我在一个类似的系统上工作,视图加入视图,随着系统中数据量的增加,性能最终变得不可接受。我发现从头开始重写查询以访问基表而不是查看,查询成本有了数量级的提高。您可能会发现,如果您查看相同基表被重复访问以执行不同聚合的计划。 [可能出现的低效率的例子](http://stackoverflow.com/questions/3222542/is-querying-on-views-slower-than-doing-one-query/3222905#3222905) – 2010-10-08 23:06:46

回答

9

Distribute StreamsRepartion Streams是当SQL优化器选择使用Parallel Query Processing时发生的操作。如果您怀疑这会导致查询出现问题,则可以强制SQL Server仅使用一个CPU,并使用MAXDOP query hint,如下所示。

select * 
    from sys.tables 
    option (maxdop 1) 
+0

我不知道。 。我只是看到这些操作在执行计划中花费最高...... – 2010-10-06 07:19:25

+5

对,这就是为什么Joe说如果花费最大,请尝试使用maxdop 1并查看您的总体查询性能是否提高。 – 2010-10-18 01:45:12