Mam dane o zmiennej długości i chcę przechowywać w bazie danych SQL Server (2005). Chcę poznać najlepsze praktyki dotyczące wyboru typu TEKSTOWEGO SQL lub typu VARCHAR SQL, plusy i minusy w zakresie wydajności / śladu / funkcji.
Mam dane o zmiennej długości i chcę przechowywać w bazie danych SQL Server (2005). Chcę poznać najlepsze praktyki dotyczące wyboru typu TEKSTOWEGO SQL lub typu VARCHAR SQL, plusy i minusy w zakresie wydajności / śladu / funkcji.
Odpowiedzi:
Jeśli używasz programu SQL Server 2005 lub nowszego, użyj varchar(MAX)
. Typ text
danych jest przestarzały i nie należy go używać do nowych prac programistycznych. Z dokumentów :
Ważny
ntext
,text
iimage
typy danych zostaną usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania tych typów danych w nowych pracach programistycznych i planuj modyfikowanie aplikacji, które ich obecnie używają. Zamiast tego używaj nvarchar (max) , varchar (max) i varbinary (max) .
TEXT
jest używany do dużych fragmentów danych łańcuchowych. Jeśli długość pola przekracza określony próg, tekst jest zapisywany poza wierszem.
VARCHAR
jest zawsze przechowywany w rzędzie i ma limit 8000 znaków. Jeśli spróbujesz utworzyć VARCHAR(x)
, gdzie x> 8000 , pojawi się błąd:
Serwer: Msg 131, poziom 15, stan 3, wiersz 1
Rozmiar () nadany typowi „varchar” przekracza maksimum dozwolone dla dowolnego typu danych (8000)
Te ograniczenia nie dotyczą długości VARCHAR(MAX)
w SQL Server 2005 , które mogą być przechowywane z rzędu, podobnie jak TEXT
.
Zauważ, że MAX
nie jest to rodzaj stałej tutaj VARCHAR
i VARCHAR(MAX)
są to bardzo różne typy, przy czym te ostatnie są bardzo zbliżone TEXT
.
We wcześniejszych wersjach programu SQL Server nie można było uzyskać TEXT
bezpośredniego dostępu , można było tylko uzyskać TEXTPTR
i używać go READTEXT
oraz WRITETEXT
funkcji.
W SQL Server 2005 możesz bezpośrednio uzyskać dostęp do TEXT
kolumn (choć nadal potrzebujesz jawnego rzutowania, VARCHAR
aby przypisać im wartość).
TEXT
jest dobry:
VARCHAR
jest dobry:
Przez wybranie tutaj mam na myśli wydając jakieś pytania, które zwracają wartość kolumny.
Przez poszukiwanie tutaj mam na myśli wydając jakieś pytania, których wynik zależy od wartości TEXT
lub VARCHAR
kolumnie. Obejmuje to używanie go w dowolnym stanie JOIN
lub WHERE
stanie.
Ponieważ dane TEXT
są przechowywane poza wierszem, zapytania nie obejmujące TEXT
kolumny są zwykle szybsze.
Kilka przykładów tego, co TEXT
jest dobre dla:
Kilka przykładów tego, co VARCHAR
jest dobre dla:
Zasadniczo, jeśli kiedykolwiek potrzebujesz wartości tekstowej przekraczającej 200 znaków ORAZ nie używaj łączenia w tej kolumnie, użyjTEXT
.
W przeciwnym razie użyj VARCHAR
.
PS To samo dotyczy UNICODE
włączonych, NTEXT
a NVARCHAR
także, których należy użyć w powyższych przykładach.
PPS To samo dotyczy VARCHAR(MAX)
i NVARCHAR(MAX)
że SQL Server 2005+ zastosowań zamiast TEXT
a NTEXT
. Musisz włączyć large value types out of row
do nich sp_tableoption
, jeśli chcesz, żeby być zawsze przechowywany z rzędu.
Jak wspomniano powyżej i tutaj , TEXT
w przyszłych wydaniach będzie przestarzały:
text in row
Opcja zostanie usunięta w przyszłej wersji z SQL Server . Unikaj korzystania z tej opcji w nowych pracach programistycznych i planuj modyfikować obecnie używane aplikacjetext in row
. Zaleca się przechowywanie dużych ilości danych za pomocąvarchar(max)
,nvarchar(max)
lubvarbinary(max)
typów danych. Aby kontrolować zachowanie tych typów danych w wierszu i poza wierszem, użyjlarge value types out of row
opcji.
W SQL Server 2005 wprowadzono nowe typy danych: varchar(max)
i nvarchar(max)
mają zalety starego typu tekstu: mogą zawierać do 2 GB danych, ale mają także większość zalet varchar
i nvarchar
. Wśród tych zalet jest możliwość korzystania z funkcji manipulacji ciągami, takich jak substring ().
Ponadto varchar (max) jest przechowywany w przestrzeni tabeli (dysku / pamięci), podczas gdy rozmiar jest mniejszy niż 8 KB. Tylko wtedy, gdy umieścisz więcej danych w polu, są one przechowywane poza obszarem tabeli. Dane przechowywane w obszarze tabeli są (zwykle) szybciej pobierane.
Krótko mówiąc, nigdy nie używaj tekstu, ponieważ istnieje lepsza alternatywa: (n) varchar (max). I używaj varchar (maks.), Gdy zwykły varchar nie jest wystarczająco duży, tj. Jeśli spodziewasz się, że ciąg, który zamierzasz przechowywać, przekroczy 8000 znaków.
Jak zauważono, możesz użyć SUBSTRING na typie danych TEKST, ale tylko tak długo, jak długo pola TEKST zawierają mniej niż 8000 znaków.
Nastąpiły pewne poważne zmiany w ms 2008 -> Przy podejmowaniu decyzji o tym, jakiego typu danych użyć, warto rozważyć poniższy artykuł. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bajtów na