Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-分组方式,超过1000万行,达到性能要求_Sql_Sql Server_Query Performance - Fatal编程技术网

SQL Server-分组方式,超过1000万行,达到性能要求

SQL Server-分组方式,超过1000万行,达到性能要求,sql,sql-server,query-performance,Sql,Sql Server,Query Performance,SQL Server-如何通过GROUP BY和HAVING子句30+或1000多万行上的条件来提高查询性能如果您向我们展示您的查询(如果需要,您可以对其进行模糊处理),我们会更有帮助,但一般来说,您可以创建计算的、持久的、位列,为您预先计算OR语句: 而不是: HAVING [A] > 100000 OR [B] < 1000 具有[A]>100000或[B]100000或[B]

SQL Server-如何通过GROUP BY和HAVING子句30+或1000多万行上的条件来提高查询性能

如果您向我们展示您的查询(如果需要,您可以对其进行模糊处理),我们会更有帮助,但一般来说,您可以创建计算的、持久的、位列,为您预先计算OR语句:

而不是:

HAVING [A] > 100000 OR [B] < 1000
具有[A]>100000或[B]<1000
使用:

altertable[FOO]
如果[A]>100000或[B]<1000,则添加IsFiltered,然后保留1,否则0结束
然后将[IsFiltered]添加到索引中以获得额外的速度。您还可以创建函数来执行计算:


或者,是时候咬紧牙关,在SSAS多维数据集中创建这些计算了。这可能是一个巨大的飞跃,但多维数据集可以提供对数据的许多洞察。

索引是提高性能的最佳方法,另请参阅SQL server Management studio中的执行计划,以了解在哪些方面花费了大量时间。深吸一口气,想想是什么让您处于这样的境地:)考虑使用索引视图。考虑到问题的严重性,这是一个很好的答案。干得好我不明白。计算列无法计算聚合,至少不能有效地计算聚合。如果group by keys上有
having
,那么过滤应该移到
where
子句中。@GordonLinoff--我想问题是,如果在“条件”中要使用计算,可以对每一行进行预计算,以节省逐步分组的时间。@Hogan。在
分组依据
之后,计算列不可用。只引用计算列不会有多大帮助。
ALTER TABLE [FOO]
ADD IsFiltered AS CASE WHEN [A] > 100000 OR [B] < 1000 THEN 1 ELSE 0 END PERSISTED