Ograniczanie wyników ustawia się przy użyciu TABLESAMPLE

Klauzula TABLESAMPLE ogranicza liczbę wierszy zwracanych z tabela w klauzuli FROM, liczba próbek lub procent 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. */.

tabelaPRÓBKI nie mogą być stosowane do pochodnych tabelas, tabelas z połączonych serwerów i tabelas pochodzące z tabela-wyceniane funkcje, funkcje zestawu zestaw wierszy lub OPENXML.TABLESAMPLE nie może być określony w definicji widoku lub wbudowanego funkcja zwracająca tabelę.

Składnia klauzula obszaru tabel jest następująca:

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

[ REPEATABLE (repeat_seed) ]

Ostrzeżenie

TABLESAMPLE został wprowadzony w SQL Server 2005.Gdy TABLESAMPLE jest używana w bazach danych uaktualnionych z wcześniejszej wersja, poziom zgodności bazy danych musi być zestaw przynajmniej 90.Aby zestaw zgodności bazy danych o poziomie, zobacz ALTER DATABASE (Transact-SQL).

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

  • Próbki nie ma być rzeczywiście losowy próbki poziom poszczególnych wierszy.

  • Wiersze na poszczególnych stronas tabela nie są skorelowane z innych wierszy na tym samym strona.

Ważna informacjaWażne:

Naprawdę losowo poszczególnych wierszy, należy zmodyfikować kwerendę, aby odfiltrować wiersze losowo, zamiast TABLESAMPLE.Na przykład następujące kwerendy używa NEWID funkcja zwraca około jednego procenta wierszy Sales.SalesOrderDetail tabela:

SELECT * FROM Sales.SalesOrderDetail

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

/ CAST (0x7fffffff AS int)

SalesOrderID Kolumna jest uwzględniona w CHECKSUM wyrażenie tak, aby NEWID() oblicza się raz w wierszu do osiągnięcia pobierania próbkowanie na podstawie na wiersz.Wyrażenie CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) wynikiem losowe float wartości między 0 i 1.

Za pomocą opcji systemu

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

TABLESAMPLE SYSTEM zwraca przybliżoną procent wierszy i generuje losową wartość dla każdej fizycznej strona 8 KB w tabela.Na podstawie losowych wartości dla strona i procent określony w kwerendzie, strona jest zawarty w próbce lub wyłączone.Każdej strona, która jest dołączony zwraca wszystkich wierszy zestaw wyników próbki.Na przykład, jeśli zostanie określony TABLESAMPLE SYSTEM 10 PERCENT, SQL Server zwraca wszystkie wiersze na około 10 procent stron określonych danych tabela.Jeśli wiersze są rozkładane równomiernie na stronach tabela i istnieje wystarczająca liczba stron w tabela, wielkość próbki żądanego powinny być zbliżone liczby wierszy zwracanych.Jednak ponieważ wartość losowe, który jest generowany dla każdej strona jest niezależna od wartości, które są generowane dla drugiej strona, może zostać zwrócona procent większy lub mniejszy, strona nie wnioskowano.TOP(n) operator, można 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 procent wierszy i stron, które powinny być zwrócone.Operacja TABLESAMPLE jest następnie wykonywane z który obliczany procent.

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

Za pomocą systemu TABLESAMPLE dla określonej tabela ogranicza plan wykonania umożliwia skanowanie tabela w tej tabela (skanowanie sterty lub indeks klastrowany, jeśli istnieje).Chociaż plan pokazuje tabela skanowanie jest wykonywane, tylko strony, które są zawarte zestaw wyników są faktycznie wymagane do odczytu z pliku danych.

Ważna informacjaWażne:

Klauzula TABLESAMPLE systemu należy używać ostrożnie i niektóre opis niektórych skutków za pomocą pobierania próbkowanie.Na przykład łączyć dwóch tabel prawdopodobnie zwracają dopasowania dla każdego wiersza w obu tabelach; Jednak jeśli określono TABLESAMPLE SYSTEM dla jednej z dwóch tabel, prawdopodobnie nie wystąpi zgodnych wierszy w tabela partii są niektóre wiersze z tabela unsampled.To zachowanie może prowadzić do podejrzeń, że istnieje problem spójności danych w tabelach danej, gdy dane są rzeczywiście prawidłowe.Podobnie jeśli określono TABLESAMPLE SYSTEM dla obu tabel, które są połączone, dostrzeżonego problemu może być nawet gorsza.

Za pomocą opcji POWTARZALNE

Opcja POWTARZALNYCH powoduje wybranej próbce powinny być zwrócone ponownie.Gdy REPEATABLE jest określona w tym samym repeat_seed wartości, SQL Server zwraca ten sam podzbiór wierszy, jak zostały dokonane żadne zmiany do tabela.Gdy określono z inną REPEATABLE repeat_seed wartości, SQL Server zazwyczaj zwróci próbkę wierszy w tabela.Następujące akcje w tabela są uznawane za zmiany: Wstawianie, aktualizowanie, usuwanie, odbudowanie indeksu, indeks defragmentowanie, przywracanie bazy danych i dołączania bazy danych.

Przykłady

A.Wybierając procent wierszy

Person.Person Tabela zawiera 19 972 wierszy.Następująca instrukcja zwraca około 10 procent wierszy.Liczbę wierszy zwracanych zwykle zmian co czas , wykonaniu instrukcja.

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

B.Wybranie odsetek wierszy z wartością materiału siewnego

Następująca instrukcja zwraca ten sam zestaw wierszy każdego czas , który jest wykonywany.Wartość początkową 205 został wybrany arbitralnie.

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

C.Wybierając liczbę wierszy

Następująca instrukcja zwraca około 100 wierszy.Rzeczywista liczba wierszy zwracanych mogą się znacznie różnić.Określ liczbę małych, na przykład 5, może nie otrzymywać wyniki w próbce.

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

Zobacz także

Odwołanie