SQL SERVER 2012 中的 TABLESAMPLE(10) 和 TABLESAMPLE(10 PERCENT) 有什么区别

Dav*_*man 9 sql-server t-sql

我对 TABLESAMPLE 的使用的理解是它返回结果集中前 n% 的行,其中 TABLESAMPLE(n)

所以我写了以下查询来检查(因为我正在学习 T-SQL)

SELECT FirstName,
       MiddleName,
       LastName
FROM Person.Person TABLESAMPLE(10)

SELECT FirstName,
       MiddleName,
       LastName
FROM Person.Person TABLESAMPLE(10 PERCENT)
Run Code Online (Sandbox Code Playgroud)

每次执行查询时,每个查询都会返回不同数量的行。

所以我显然不理解TABLESAMPLE。有人能解释一下吗?

Aar*_*and 6

简短的回答是TABLESAMPLE不能保证返回您指定的行数(或 %),因为它基于页面而不是行,并返回它标识的页面中的所有行。除非您的表格只有固定宽度的列,否则根据百分比或行数拉出的页面可能包含非常不同的行数。

您可以使用该REPEATABLE选项使其更加一致,但这仍然不会使其返回正确的行数。如果您只是想检索随机行的确切数量或百分比,请使用:

SELECT TOP (10) -- or 10 PERCENT
  columns
FROM dbo.table
ORDER BY NEWID();
Run Code Online (Sandbox Code Playgroud)

请通读此提示此问题以及所有答案


小智 0

TableSample() 不保证返回您指定的数字或%。我发现它可以返回 0 行,少于您请求的行数,多于您指定的行数。

我在 Northwind 的 Orders 表上运行了这个查询,该表有 829 行。

select * from orders TableSample(10 percent)
Run Code Online (Sandbox Code Playgroud)

在我运行此查询的不同时间,我得到了 124, 42,82, 85,0, 0, 84...