Sự khác biệt giữa TABLESAMPLE (10) và TABLESAMPLE (10 PERCENT) trong SQL SERVER 2012


8

Sự hiểu biết của tôi về việc sử dụng TABLESAMPLE là nó trả về n phần trăm hàng đầu trong một tập kết quả trong đó TABLESAMPLE (n)

Vì vậy, tôi đã viết các truy vấn sau để chỉ kiểm tra (khi tôi đang học T-SQL)

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

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

Mỗi truy vấn trả về một số lượng hàng khác nhau mỗi lần tôi thực hiện nó.

Vì vậy, tôi rõ ràng không hiểu TABLESAMPLE. Ai đó có thể giải thích?

Câu trả lời:


0

TableSample () không đảm bảo trả về số hoặc% bạn chỉ định. Tôi thấy rằng nó có thể trả về 0 hàng, ít hơn những gì bạn yêu cầu và nhiều hơn những gì bạn đã chỉ định.

Tôi đã chạy truy vấn này trên bảng Đơn hàng ở Northwind có 829 hàng.

select * from orders TableSample(10 percent)

Trong những lần khác nhau tôi chạy truy vấn này, tôi đã nhận được, 124, 42,82, 85,0, 0, 84. ..


6

Câu trả lời ngắn gọn TABLESAMPLElà không được đảm bảo trả về số lượng hàng bạn chỉ định (hoặc%) vì nó dựa trên các trang chứ không phải trên các hàng và trả về tất cả các hàng từ các trang mà nó xác định. Trừ khi bảng của bạn chỉ có các cột có chiều rộng cố định, các trang được rút ra dựa trên% hoặc số lượng hàng có thể chứa số lượng hàng khác nhau rất lớn.

Bạn có thể làm cho điều này phù hợp hơn bằng cách sử dụng REPEATABLEtùy chọn, nhưng điều đó vẫn không làm cho nó trả về đúng số hàng. Nếu bạn chỉ đơn giản là cố gắng truy xuất một số chính xác hoặc tỷ lệ phần trăm của các hàng ngẫu nhiên, hãy sử dụng:

SELECT TOP (10) -- or 10 PERCENT
  columns
FROM dbo.table
ORDER BY NEWID();

Vui lòng đọc qua mẹo nàycâu hỏi này và tất cả các câu trả lời .


3

Tôi đồng ý với @Aaron nhưng tôi nên đề cập nếu bạn muốn các bản ghi thực sự ngẫu nhiên, điều này có thể đúng nhất đặc biệt trong các bảng lớn:

SELECT * FROM Table1
  WHERE (ABS(CAST(
  (BINARY_CHECKSUM(*) *
  RAND()) as int)) % 100) < 10

Vui lòng đọc mô tả đầy đủ trong MSDN

Hy vọng điều này giúp đỡ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.