sql >> Database teknologi >  >> RDS >> Sqlserver

900 byte indeksstørrelsesgrænse i tegnlængde

Lagerstørrelsen for varchar er den faktiske længde af de indtastede data + 2 bytes. Selvom selve kolonnen har de 2 byte overhead, kan du indsætte op til 900 byte varchar-værdier i en kolonne, som er indekseret.

I praksis kan du oprette et indeks på en kolonne større end 900 bytes i størrelse, men du vil have et problem, hvis du rent faktisk prøver at indsætte noget større end 900 bytes:

create table test (
    col varchar(1000)
);
create index test_index on test (col);
-- Warning! The maximum key length is 900 bytes. The index 'test_index' has maximum length of 1000 bytes. For some combination of large values, the insert/update operation will fail.
insert into test select cast(replicate('x', 899) as varchar(1000)); -- Success
insert into test select cast(replicate('y', 900) as varchar(1000)); -- Success
insert into test select cast(replicate('z', 901) as varchar(1000)); -- Fail
-- Msg 1946, Level 16, State 3, Line 8
-- Operation failed. The index entry of length 901 bytes for the index 'test_index' exceeds the maximum length of 900 bytes.

Vær opmærksom på, at grænsen på 900 byte inkluderer alle kolonner i en given indeksnøgle, som dette eksempel viser:

create table test (
      col varchar(1000)
    , otherCol bit -- This column will take a byte out of the index below, pun intended
);
create index test_index on test (col, otherCol);
insert into test select cast(replicate('x', 899) as varchar(1000)), 0; -- Success
insert into test select cast(replicate('y', 900) as varchar(1000)), 0; -- Fail
insert into test select cast(replicate('z', 901) as varchar(1000)), 0; -- Fail

For disse kolonner, der normalt er for store til en indeksnøgle, kan du muligvis opnå nogle fordele ved at indeksere ved at inkludere dem i et indeks.



  1. Kan tabelkolonner med en fremmednøgle være NULL?

  2. Hvad er SQL, og hvordan kommer man i gang med det?

  3. Hvordan CRC32 virker i MariaDB

  4. ALTER TABLE-sætningen var i konflikt med CHECK-begrænsningen i SQL Server - SQL Server / TSQL Selvstudium, del 89