ďťż
 
SQL Server: kolejność pól w tabeli ďťż
 
SQL Server: kolejność pól w tabeli
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lisinski.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com