SQL Server: kolejność pól w tabeli
RM, Warszawa - 13-11-2006 00:45
SQL Server: kolejność pól w tabeli
Dzień dobry, Poznaję SQL Servera (2005). Mam następujące pytanie do doświadczonych developerów: czy przy definiowaniu tabeli kolejność pól ma znaczenie? Np. kiedy pracowałem przy systemach pisanych w PROGRESSie to (jeśli dobrze pamiętam) pola tekstowe o zmiennej długości umieszczało się na końcu tabeli. Jakie zasady obowiązują w SQL Serverze? Uprzejmie proszę o pomoc. RM, Warszawa
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Marcin A. Guzowski - 13-11-2006 00:46
RM, Warszawa napisał(a): > Dzień dobry, > Poznaję SQL Servera (2005). Mam następujące pytanie do doświadczonych developerów: > czy przy definiowaniu tabeli kolejność pól ma znaczenie? > Np. kiedy pracowałem przy systemach pisanych w PROGRESSie to (jeśli dobrze > pamiętam) pola tekstowe o zmiennej długości umieszczało się na końcu tabeli. > Jakie zasady obowiązują w SQL Serverze? > Uprzejmie proszę o pomoc. > RM, Warszawa
Jeżeli chodzi o wydajność, kolejność kolumn nie ma _żadnego_ znaczenia. Oczywiście warto np. kolumnę PK dać na początku, a kolumny z meta-informacjami, statusami - na końcu, ale służy to tylko poprawieniu czytelności struktury - w przyszłości może ułatwi to komuś utrzymywanie kodu.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Artur S. - 14-11-2006 00:56
RM, Warszawa napisał(a): > Dzień dobry, > Poznaję SQL Servera (2005). Mam następujące pytanie do doświadczonych developerów: > czy przy definiowaniu tabeli kolejność pól ma znaczenie? > Np. kiedy pracowałem przy systemach pisanych w PROGRESSie to (jeśli dobrze > pamiętam) pola tekstowe o zmiennej długości umieszczało się na końcu tabeli. > Jakie zasady obowiązują w SQL Serverze? > Uprzejmie proszę o pomoc. > RM, Warszawa >
MS SQL zrobi to sam, bo dal niego (wewnętrznie) ma to znaczenie i takie pola są "na końcu"
Pozdrawiam Artur S.
Marcin A. Guzowski - 14-11-2006 00:56
Artur S. napisał(a): > MS SQL zrobi to sam, bo dal niego (wewnętrznie) ma to znaczenie i takie > pola są "na końcu"
To w pewnym sensie prawda, tzn. ja opisałbym to tak: kolejność kolumn jest jaka jest - niezmienna (zgodnie z CREATE TABLE), natomiast SQL Server wypełniając kolejne strony danymi nie musi tej kolejności respektować na fizycznym poziomie. Inaczej mówiąc: kolejność kolumn nie ma żadnego znaczenia jeżeli chodzi o fizyczny poziom składowania. Rekord z polami typu variable length zostaje oznaczony jako: Record Attributes = VARIABLE_COLUMNS
i rzeczywiście wartości varcharów będą na końcu poszczególnych offsetów.
Przykładowo dla tabeli:
CREATE TABLE tp ( col_a nvarchar(150), col_b nvarchar(200), col_c int, col_d int )
i wykonaniu INSERTa:
INSERT INTO tp (col_a,col_b,col_c,col_d) VALUES ('aaaaa','bbbbb',1,1)
rekord będzie fizycznie wyglądał tak:
Slot 24, Offset 0x438 --------------------- Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 19936438: 000c0030 00000001 00000001 02000004 0............... 19936448: 29001f00 61006100 61006100 62006100 ...).a.a.a.a.a.b 19936458: 62006200 62006200 00 .b.b.b.b.
widać więc, że wartości 'aaaaa' i 'bbbbb' wrzucił na koniec fizycznego rekordu. W zależności od kombinacji kolumn SQL Server może przyjąć różne strategie fizycznego składowania, ale nigdy tego głębiej nie badałem więc tylko sygnalizuje.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
[oracle] - Oracle SQL Developer - co to jest SID?
[MS SQL + kontakty outlook]CZy kontakty moge być zewnętrzne?
=?ISO-8859-2?Q?[Oracle]_Wywo=B3anie_skryptu_sh_z_PL/SQL-a=3F=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|