什么是SQL Server中的"PARALLEL"等价物

Nav*_*eal 6 sql sql-server oracle

我有这个问题,我需要做一个COUNT(COLUMN_NAME)SUM(COLUMN_NAME)上几个表.问题是它在SQL Server上永远花费的时间.

我们有超过20亿条记录需要执行这些操作.

在Oracle中,我们可以使用PARALLEL提示强制单个查询/会话的并行执行.例如,对于一个简单的SELECT COUNT,我们可以做到

SELECT /*+ PARALLEL */ COUNT(1)  
FROM USER.TABLE_NAME;
Run Code Online (Sandbox Code Playgroud)

我搜索了是否有可用于SQL Server的东西,我无法想出具体的内容,我可以为并行执行指定表提示.我相信,SQL Server会根据查询成本自行决定是执行并行还是顺序执行.

Oracle中使用并行提示的相同查询需要2-3分钟才能执行,而在SQL Server上需要大约一个半小时.

Ari*_*ion 2

我正在阅读《强制并行查询执行计划》一文。对我来说,您似乎可以出于测试目的强制并行执行。作者在结论中说:

\n\n
\n

结论

\n\n

即使是拥有数十年 SQL Server 经验和详细内部知识的专家也会希望小心使用此跟踪标志。我不建议您直接在生产中使用它,除非 Microsoft 建议,但您可能希望在测试系统上使用它作为最后的手段,也许是为了生成计划指南或使用计划提示。 n 正在生产中(经过仔细审查)。

\n\n

这可以说是一种风险较低的策略,但请记住,在此跟踪标志下生成的并行计划不能保证是优化器通常会考虑的计划。如果您可以提高提供给优化器的信息质量,而不是获得并行计划,那么就这样做:)

\n
\n\n

该文章引用了跟踪标志:

\n\n
\n

\xe2\x80\x99s 总是有一个跟踪标志

\n\n

与此同时,有一个解决方法。它\xe2\x80\x99并不完美(而且大多数\n肯定是最后手段的选择),但有一个未记录\n(且不受支持)的跟踪标志,可以有效地将特定查询的成本\n阈值降低到零

\n
\n\n

据我对这篇文章的理解,你可以这样做:

\n\n
SELECT  \n   COUNT(1)  \nFROM \n   USER.TABLE_NAME\nOPTION (RECOMPILE, QUERYTRACEON 8649)\n
Run Code Online (Sandbox Code Playgroud)\n