SQL Server 中统计的默认样本大小是多少?

Pரத*_*ீப் 12 sql-server statistics

MSDN

如果(SAMPLE, FULLSCAN, RESAMPLE)未指定任何示例选项,查询优化器默认对数据进行采样并计算样本大小。

如何确定统计的默认样本量?

我浏览了 MSDN,但没有找到任何公式或方法来确定默认样本大小。到处都只有公式来触发自动统计更新。任何指针都会有所帮助。

Sha*_*nky 20

如何确定统计的默认样本量?

我会引用旧文档文章

自动更新统计算法:

因此,自动更新统计数据将在表格行中每 500 + 20% 变化触发。当然,我们在 SQL 2012 中有一个改进的算法,它是 SQRT(1000 * Table rows),它要好得多。

当它触发时,它将使用默认采样率,这里是它如何计算采样率的算法。

  1.  If the table < 8MB then it updates the statistics with a
    
    Run Code Online (Sandbox Code Playgroud)

全扫描。

  1.  If the table > 8MB, it follows an algorithm. It reduces the
    
    Run Code Online (Sandbox Code Playgroud)

表中行数增加时的采样率,以确保我们不会扫描太多数据。这不是一个固定值,而是在优化器的控制之下。它也不是线性算法。

示例:如果我们有 1,000,000 行,它将使用 30% 的采样率,但是当行数增加到 8,000,000 时,它会将采样率降低到 10%。这些采样率不受 DBA 控制,而是由优化器决定。

要进一步了解,我建议您阅读