Limiting Result Sets by Using TABLESAMPLE

Klauzula TABLESAMPLE ogranicza liczbę wierszy zwracanych z tabela w klauzuli FROM liczbę próbek lub PERCENT wierszy.Na przykład:

TABLESAMPLE (10 PERCENT) /*Return a sample 10 percent of the rows of the result set. */
TABLESAMPLE (15 ROWS) /* Return a sample of 15 rows from the result set. */.

Nie można zastosować TABLESAMPLE do pochodnych tabel, z serwerów połączonych tabel i wycenione tabela funkcje, funkcje zestawu zestaw wierszy lub OPENXML tabel.Nie można określić TABLESAMPLE w definicji widoku lub wewnętrznej funkcja wycenione tabela.

Składnia dla klauzula obszar tabel jest w następujący sposób:

TABLESAMPLE [SYSTEM] (sample_number [ PERCENT | ROWS ] )

[ REPEATABLE (repeat_seed) ]

Uwaga

TABLESAMPLE został wprowadzony w SQL Server 2005. Użyto TABLESAMPLE przed bazy danych, które są uaktualniane z wcześniejszej wersja poziom zgodności bazy danych musi wynosić co najmniej 90.Aby ustawić poziom zgodności bazy danych, zobacz ALTER DATABASE języka Transact-SQL).

Za pomocą TABLESAMPLE można szybko powrócić próbkę z dużej tabela, gdy spełniony jest jeden z następujących warunków:

  • Próbka nie ma być rzeczywiście przypadkowa próbka, poziom poszczególnych wierszy.

  • Wiersze na pojedynczych stronach w tabela nie są powiązane z innych wierszy na tej samej stronie.

Important noteImportant Note:

Naprawdę przypadkowa próbka poszczególnych wierszy, należy zmodyfikować kwerendę tak, aby odfiltrować wiersze w losowo, zamiast TABLESAMPLE.Na przykład następujące kwerendy zastosowań NEWID funkcja zwracająca około jednej procent wierszy Sales.SalesOrderDetail Tabela:

SELECT * FROM Sales.SalesOrderDetail

WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)

/ CAST (0x7fffffff AS int)

The SalesOrderID kolumna is included in the CHECKSUM wyrażenie so that NEWID() evaluates once per row to achieve próbkowanie on a per-row basis. Wyrażenie CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) wynikiem jest losowe float wartość z przedziału od 0 do 1.

Za pomocą opcji SYSTEM

SYSTEM określa metoda pobierania próbkowanie zależne od implementacji SQL zgodnej ze standardem ANSI.Określanie systemu jest opcjonalne, ale ta opcja jest jedynym dostępnej w metoda do pobierania próbkowanie SQL Server i domyślnie jest stosowane.

SYSTEM TABLESAMPLE zwraca wartość przybliżona stopień wierszy i generuje losową wartości dla każdej strona fizyczne, 8 KB w tabela.W zależności od wartości losowych dla strona i wartości procentowej, określonych w kwerendzie, strona jest zawarty w próbce lub wyłączone.Każdej strona, która jest dołączona zwraca wszystkie wiersze zestaw wyników próbki.Na przykład, jeśli określony TABLESAMPLE SYSTEM 10 PERCENT, SQL Server Zwraca wszystkie wiersze na 10 procent stron określone dane w tabela. Jeśli wiersze są równomiernie na stronach w tabela i jeśli istnieje wystarczająca liczba stron w tabela, liczbę zwracanych wierszy powinna zbliżone do żądanych jest rozmiarem próbki.Jednak ponieważ wartość losowe, który jest generowany dla każdej strona zależy od ich wartości, które są generowane dla każdej innej strona, większe lub mniejsze, wartość procentową strona nie zażądano mogą zostać zwrócone.Można używać operator TOP(n), aby ograniczyć liczbę wierszy do określonego maksimum.

Gdy liczba wierszy określono, zamiast wartością procentową opartą na całkowitą liczbę wierszy w tabela, że numer jest konwertowany na wartość procentową wierszy i, w związku z tym, strony, które powinny być zwrócone.Operacja TABLESAMPLE zostanie następnie wykonane, obliczona wartość procentowa.

Jeśli w tabela składa się z jednej strona, zwracane są wszystkie wiersze strona lub są zwracane żadne wiersze.W takim przypadek SYSTEM TABLESAMPLE można tylko zwracać 100 procent lub 0 procent wierszy strona, niezależnie od liczby wierszy strona.

Za pomocą systemu TABLESAMPLE dla określonej tabela ogranicza wykonanie planu, który będzie używany skanowanie tabela w tej tabela (skanowanie sterty lub indeks klastrowany, jeśli taki istnieje).Chociaż planu Pokazuje tabela skanowanie jest wykonywane, tylko tych stron, które znajdują się zestaw wyników są faktycznie wymagane do odczytu z pliku danych.

Important noteImportant Note:

Niektóre ostrożnie, a niektóre wiedzy na temat niektórych następstwa używania próbkowanie, należy użyć klauzula TABLESAMPLE SYSTEM.Na przykład łączyć dwóch tabel jest prawdopodobne, że powrót dopasowania dla każdego wiersza w obu tabelach, jednak jeśli TABLESAMPLE SYSTEM został określony dla jednej z dwóch tabel, niektóre wiersze zwrócił unsampled tabela są prawdopodobnie nie ma pasującego wiersza w tabela próbki.Zachowanie to może prowadzić można podejrzewać, że danych spójności istnieje problem w tabelach danej strony, gdy dane są faktycznie prawidłowe.Podobnie jeśli SYSTEM TABLESAMPLE został określony dla obu tabel, które są połączone, dostrzeżonego problemu może być nawet gorsza.

Za pomocą opcji POWTARZALNYCH

POWTARZALNY opcji powoduje, że wybrany próbki mają pojawiać się ponownie.Jeśli zostanie użyty REPEATABLE o tej samej repeat_seed wartości, SQL Server Zwraca te same podzbiór wierszy, dopóki zmiany nie zostały dokonane w tabela. Jeśli REPEATABLE zostanie użyty z innym repeat_seed wartości, SQL Server Zazwyczaj zwróci próbkę różnych wierszy w tabela. Następujące akcje w tabela są uważane za zmiany: Wstawianie, aktualizowanie, usuwanie, przebudowywanie indeksu, defragmentowanie indeksu, przywracanie bazy danych i dołączanie bazy danych.

Przykłady

A.Wybieranie procent wierszy

The Person.Contact tabela contains 19,972 rows. Następująca instrukcja zwraca około 10 procent wierszy. Liczba wierszy zwracanych zazwyczaj zmian każdego czas wykonanych w instrukcja.

USE AdventureWorks ;
GO
SELECT FirstName, LastName
FROM Person.Contact 
TABLESAMPLE (10 PERCENT) ;

B.Wybranie odsetek wiersze, dla których wartość początkową

Następująca instrukcja zwraca ten sam zbiór wierszy, za każdym razem, że zostanie wykonana.Wartość początkową z 205 arbitralnie została wybrana.

USE AdventureWorks ;
GO
SELECT FirstName, LastName
FROM Person.Contact 
TABLESAMPLE (10 PERCENT) 
   REPEATABLE (205) ;

C.Zaznaczanie wielu wierszy

Następująca instrukcja zwraca około 100 wiersze. Rzeczywista liczba wierszy, które są zwracane może się znacznie różnić.Jeżeli określono liczbę małych, na przykład 5, może nie otrzymywać wyniki w próbce.

USE AdventureWorks ;
GO
SELECT FirstName, LastName
FROM Person.Contact 
TABLESAMPLE (100 ROWS) ;

See Also

Other Resources