Udostępnij za pośrednictwem


In-Row Data

Duża wartość małych na nośniku typy)varchar(max), nvarchar(max), varbinary(max), a xml) i typy danych dużego obiektu (LOB) ()text, ntext, a image) mogą być przechowywane w wierszu danych. To zachowanie jest kontrolowany za pomocą dwóch opcji w sp_tableoption systemu procedura przechowywana: the typy dużą wartość z wiersza Opcja typy dużą wartość a tekst w wierszu opcji w przypadku dużych obiektów.Te opcje są najlepsze rozwiązanie dla tabel, w którym wartości danych z dowolnego z tych typów danych są zazwyczaj odczytu lub zapisu w jednej jednostki, a większość instrukcji, które odwołują się do tabela odnoszą się do tego typu danych.W zależności od cech użycia lub obciążenia przechowywanie danych w wierszu może nie być użyteczny.

Important noteImportant Note:

The text in row option will be removed in a future wersja of SQL Server. Należy unikać używania tej opcji w nowej pracy rozwoju i zaplanować do modyfikowania aplikacji korzystających aktualnie z tekst w wierszu.Zaleca się przechowywanie dużych danych przy użyciu varchar(max), nvarchar(max), lub varbinary(max) typy danych. Aby kontrolować zachowanie tych typów danych w wierszu i wychodzących z wiersza, należy użyć typy dużą wartość z wiersza opcji.

Chyba że tekst w wierszu opcja jest zestaw na ON lub do poziomu określonego w wierszu, text, ntext, lub image ciągi znaków są duży znak lub ciągów binarnych (do 2 gigabajtów), które są przechowywane poza wierszem danych. Wiersz danych zawiera tylko wskaźnik 16-bajtowy tekst, który wskazuje na węzła głównego drzewa wbudowany wewnętrzny wskaźników.Te wskaźniki mapowanie stron, w którym są przechowywane fragmenty ciągów.Aby uzyskać więcej informacji na temat przechowywania text, ntext, lub image ciągi, zobacz Using text and image Data.

zestaw tekst w wierszu opcja dla tabel, które zawierają dane LOB typu kolumny.Można też określić, tekst w wierszu limit opcji od 24 do 7,000 bajtów.

Podobnie chyba że typy dużą wartość z wiersza opcja jest zestaw on varchar(max), nvarchar(max), varbinary(max), a xml kolumny są przechowywane, jeśli jest to możliwe, wewnątrz wiersza danych. Jeśli tak się dzieje, SQL Server Database Engine próbuje dopasować określoną wartość, jeśli można, a w przeciwnym razie będzie wartość wyłączone wiersz wypychanie. Jeśli typy dużą wartość z wiersza jest zestaw on, wartości są przechowywane poza wiersz, a wskaźnik 16-bajtowy tekst jest przechowywany w rekordzie.

Uwaga

Maksymalny w wierszu dla typów danych dużą wartość jest równa 8000 bajtów po typy dużą wartość z wiersza jest wyłączona.W odróżnieniu od tekst w wierszu Opcja nie można określić limit w wierszu dla kolumn w tabela.

Gdy tabela jest skonfigurowany do przechowywania typów dużej wartości lub typów danych dużego obiektu bezpośrednio w wierszu danych, wartości rzeczywiste kolumn zostaną w wiersze, jeśli istnieje jeden z następujących warunków:

  • Długość ciąg jest krótszy niż określony limit text, ntext, a image kolumny.

  • Brak wystarczającej ilości miejsca w wierszu danych, aby pomieścić ciąg.

Typ wartości dużych lub dużego obiektu wartości kolumna Typ danych jest przechowywany w wierszu danych Database Engine nie ma dostępu do osobną strona lub zestaw stron do odczytu lub zapisu znak lub ciąg binarny. Dzięki temu, Odczyt i zapis ciągów znaków w wierszu około tak szybka jak Odczyt lub zapis ograniczony rozmiar varchar, nvarchar, lub varbinary ciągi znaków. Podobnie, gdy wartości są przechowywane poza wiersze, Database Engine wiąże się ze stroną dodatkowe, odczytu lub zapisu.

W przypadku typów danych dużego obiektu, jeśli ciąg jest dłuższy niż tekst w wierszu opcja limitu lub ilość wolnego miejsca, w wierszu zestaw wskaźników, które są inaczej przechowywane w głównym węzłem drzewa wskaźnik są przechowywane w wierszu.Kursory są przechowywane w wierszu, jeśli istnieje jeden z następujących warunków:

  • Jest krótszy niż określona ilość miejsca na potrzeby przechowywania wskaźników tekst w wierszu opcję limit.

  • Brak wystarczającej ilości miejsca w wierszu danych do przechowywania wskaźników.

Gdy wskaźniki są przenoszone z węzła głównego do wiersza, program Database Engine nie musi używać węzła głównego.Może to wyeliminować dostęp do strony podczas odczytywania lub zapisywania ciągu.Powoduje to zwiększenie wydajności.

W przypadku węzłów głównych, są przechowywane w jednym z fragmentów ciąg znaków strona LOB i może zawierać maksymalnie pięć wskaźniki wewnętrznych.The Database Engine needs 72 bytes of space in the row to store five pointers for an in-row ciąg. Jeśli jest za mało miejsca, w wierszu do przechowywania wskaźników podczas tekst w wierszu opcji jest włączone lub typy dużą wartość z wiersza opcja jest wyłączona Database Engine trzeba przydzielić strona 8 KB do ich przechowywania. Jeśli długość danych wartości przekracza 40,200 bajtów, więcej niż pięć wskaźniki w wierszu są wymagane, w których tylko 24 bajty punktu są przechowywane w głównym wiersz, a na LOB miejsca jest przydzielana strona dodatkowych danych.

Kiedy długie ciągi są przechowywane w wierszu, są one przechowywane podobnie na ciągi znaków o zmiennej długości.The Database Engine sorts columns in decreasing size order and pushes values off-row until the remaining columns dopasowanie in the data strona (8K).

Włączanie i wyłączanie typów duże wartości z wierszy, opcja

Aby umożliwić typy dużą wartość z wiersza Opcja tabela przy użyciu sp_tableoption w następujący sposób:

sp_tableoption N'MyTable', 'large value types out of row', 'ON'

Jeśli określisz OFF limit w wierszu varchar(max), nvarchar(max), varbinary(max), a xml kolumny jest zestaw do 8000 bajtów. Wskaźnik 16-bajtowy główny jest przechowywana w wierszu, a wartość jest przechowywana w miejscu przechowywania LOB.Zaleca się ustawienie tej opcji ON dla tabel, w którym większość instrukcji nie odwołania kolumn typu dużą wartość.Przechowywanie tych kolumn poza o wiersz oznacza, że może być mieszczą się na więcej wierszy strona, w związku z tym ograniczenie liczby operacji We/Wy wymaganej do skanowania w tabela.

Wartość tej opcji wartość OFF, wiele ciągów może się to zakończyć przypadkowym przechowywane w wierszu, potencjalnie zmniejszenie liczby wierszy danych, które mieszczą się na każdym strona.Jeśli nie dostęp do większości instrukcji, które odwołują się do tabela varchar(max), nvarchar(max), varbinary(max), a xml kolumny, zmniejszając wierszy strona może spowodować zwiększenie stron, które musi być odczytywany do przetwarzania kwerend. Zmniejszanie wierszy na każdej stronie można zwiększyć liczbę stron, które mogą zawierać do skanowania, jeżeli Optymalizator odnajdzie indeks nie nadaje się do użytku.

Można również użyć sp_tableoption , aby wyłączyć opcję limit czasu z wiersza:

sp_tableoption N'MyTable', 'large value types out of row', 'OFF'

Kiedy dużą wartość wpisze się z wartości opcji wiersza zostanie zmieniona, istniejące varchar(max), nvarchar(max), varbinary(max), a xml wartości nie są konwertowane natychmiast. Przechowywanie ciągów ulega zmianie, jak zostaną następnie zaktualizowane.Wszelkie nowe wartości wstawione do tabela są przechowywane zgodnie z opcją tabela w mocy.

Aby zbadać wartość typy dużą wartość z wiersza opcji dla określonej tabela, kwerendy large_value_types_out_of_row kolumnasys.Tables Służy do wyświetlania katalogu. W tej kolumnie jest 0, jeśli nie ma w tabela typy dużą wartość z wiersza włączone, a 1 Jeśli typy duże wartości są przechowywane z wiersza.

Włączanie i wyłączanie tekstu w wierszu opcji

Aby umożliwić tekst w wierszu Opcja tabela przy użyciu sp_tableoption w następujący sposób:

sp_tableoption N'MyTable', 'text in row', 'ON'

Opcjonalnie można określić maksymalnie od 24 do 7,000 bajty długości text, ntext, a image ciąg znaków, które mogą być przechowywane w wierszu danych:

sp_tableoption N'MyTable', 'text in row', '1000'

Jeśli określisz ON zamiast określonego limitu limit domyślnie 256 bajtów.Ta wartość domyślna zawiera większość korzyści wydajności, które mogą zostać uzyskane za pomocą tekst w wierszu opcji.Chociaż zazwyczaj nie należy ustawiać wartość niższą niż 72, również nie należy ustawiać wartość zbyt duża.Dotyczy to zwłaszcza w przypadku tabel, w którym większość instrukcji nie odwołać text, ntext, a image kolumny; lub w których występują wielu text, ntext, a image kolumny.

Jeśli ustawisz duże tekst w wierszu limit i wiele ciągów są przechowywane w samym wierszu, mogą znacznie zmniejszyć liczbę wierszy danych, które mieszczą się na każdym strona.Jeśli nie dostęp do większości instrukcji, które odwołują się do tabela text, ntext, lub image kolumny, zmniejszając wierszy strona może spowodować zwiększenie stron, które musi być odczytywany do przetwarzania kwerend. Ograniczenie na wiersze strona może zwiększyć rozmiar indeksów i s strona, które mogą zawierać do skanowania, jeżeli Optymalizator odnajdzie indeks nie nadaje się do użytku.Wartość domyślna, 256 dla tekst w wierszu limit jest wystarczająco duży, aby upewnić się, że ciągi małych i wskaźniki tekstu głównego mogą być przechowywane w wierszach, ale nie tak duża że zmniejsza ona wierszy na każdej stronie wystarczająco wpłynąć na wydajność.

The text in row option is automatically zestaw to 256 for variables with a tabela data type and for tables returned by user-defined functions that return a tabela.Nie można zmienić to ustawienie.

Można również użyć sp_tableoption , aby wyłączyć opcję określając wartość opcji albo WYŁĄCZANIE or 0:

sp_tableoption N'MyTable', 'text in row', 'OFF'

Aby zbadać wartość tekst w wierszu opcji dla określonej tabela, kwerendy text_in_row_limit kolumnasys.Tables Służy do wyświetlania katalogu. W tej kolumnie jest 0, jeśli nie ma w tabela tekst w wierszu włączone, a wartość większą niż 0, jeśli został ustawiony limit w wierszu.

Skutki przy użyciu tekstu w wierszu opcji

The text in row option has the following effects:

  • Po włączeniu tekst w wierszu Opcja można użyć instrukcji TEXTPTR, READTEXT, UPDATETEXT lub WRITETEXT, aby odczytywać lub modyfikować części wszelkie text, ntext, lub image wartość przechowywana w tabela. W instrukcji SELECT można odczytać całego text, ntext, lub image ciąg znaków lub użyć funkcja SUBSTRING i odczytywania części ciągu. Wszystkie INSERT lub UPDATE instrukcji, które odwołują się do tabela musi określać pełną ciągi znaków i nie można modyfikować tylko część text, ntext, lub image ciąg znaków.

  • Gdy tekst w wierszu pierwszym włączeniu opcji istniejących text, ntext, lub image ciągi nie są bezpośrednio konwertowane na ciągi znaków w wierszu. Ciągi są konwertowane w wiersze ciągi tylko wtedy, gdy zostaną następnie zaktualizowane.Wszystkie text, ntext, lub image Po dodaje ciąg tekst w wierszu opcja jest włączona jest wstawiany jako ciąg w wierszu.

  • Wyłączanie tekst w wierszu opcja może być operacją długim, zarejestrowane.Tabela jest zablokowana i wszystkie one wiersz text, ntext, a image ciągi są konwertowane na zwykły text, ntext, a image ciągi znaków. Limit czas polecenia musi być uruchomiony i ilość danych zmodyfikowane zależy od liczby text, ntext, a image ciągi znaków muszą zostać przekonwertowane z ciągów znaków one wiersza na regularne ciągi znaków.

  • The text in row option does not affect the operation of the SQL Server Native klient OLE DB dostawca or the SQL Server Native klient ODBC driver, other than to speed access to the text, ntext, and image data.

  • Biblioteki DB tekstowych i graficznych funkcje, takie jak dbreadtext and dbwritetext, nie może być używany dla tabela, po tekst w wierszu opcji został włączony.

See Also

Concepts

Other Resources