W pracy mojej żony toczy się debata na temat używania varchar(255)
wszystkich varchar
pól w tabelach tymczasowych w procedurach przechowywanych. Zasadniczo jeden obóz chce użyć 255, ponieważ zawsze będzie działał, nawet jeśli zmieni się definicja, a drugi obóz chce pozostać przy wielkości w tabelach źródłowych w celu potencjalnej poprawy wydajności.
Czy obóz wydajności jest odpowiedni? Czy są inne implikacje? Używają programu SQL Server.
sql-server
performance
datatypes
temporary-tables
Brian Nickel
źródło
źródło
MAX()
w miksie jest też kilka .Odpowiedzi:
W zależności od sposobu korzystania z tabel tymczasowych może wystąpić problem z obcinaniem danych.
Ten przykład jest nieco wymyślony, ale ilustruje mój punkt widzenia. Przykład:
Tabela temp chętnie zaakceptowałaby nową wartość varchar o długości 59. Jednak tabela użytkowników nie mogła. W zależności od tego, jak sobie z tym poradzisz w procedurze, może to spowodować obcięcie lub błąd.
O ile nie udokumentujesz i nie uwzględnisz tych problemów, procedura może zostać wykonana w nieoczekiwany sposób.
Osobiście nie sądzę, aby odpowiedź na to pytanie była poprawna w 100% przypadków. To naprawdę zależy od tego, jak korzystasz z tych tabel tymczasowych.
Mam nadzieję że to pomoże
źródło
Skłoniłbym się do użycia rzeczywistej długości pola.
Niedawno przeczytałem, że MySQL (zakładam, że SQL Server jest podobny) tabele temp przydzielają wystarczającą ilość pamięci do przechowywania maksymalnej możliwej długości dla każdej
varchar
kolumny ... Systematyczne podejście do alokacji 200% -500% wymaganej pamięci dlavarchar
pól we wszystkich procedury składowane wydają się niepotrzebnym wykorzystaniem zasobów systemowych. Jeśli kiedykolwiek używasz znacznej ilości pamięci do tworzenia tych tabel tymczasowych, możesz niepotrzebnie żądać pamięci, która była używana do buforowania, tworząc więcej pracy dla serwera w pewnym momencie w przyszłości, nawet po zakończeniu procedur przechowywania.Edycja: Zobacz odpowiedź Billa Karwina: /programming/1962310/importance-of-varchar-length-in-mysql-table
źródło