sql >> Database >  >> RDS >> Sqlserver

Indexgroottelimiet van 900 bytes in tekenlengte

De opslaggrootte voor varchar is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. Ook al heeft de kolom zelf die overhead van 2 bytes, u kunt tot 900 bytes varchar-waarden in een geïndexeerde kolom plaatsen.

In de praktijk kunt u maken een index op een kolom die groter is dan 900 bytes, maar u krijgt een probleem als u daadwerkelijk probeert te invoegen iets groter dan 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.

Houd er rekening mee dat de limiet van 900 bytes alle kolommen van een bepaalde indexsleutel omvat, zoals dit voorbeeld laat zien:

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

Voor deze kolommen die normaal gesproken te groot zijn voor een indexsleutel, kunt u mogelijk profiteren van enkele voordelen van indexering door ze in een index op te nemen.



  1. Oracle SQL:Kolom niet toegestaan

  2. MySQL-query vindt waarden in een door komma's gescheiden tekenreeks

  3. Hoe maak je een histogram in MySQL?

  4. Denormalisatie:wanneer, waarom en hoe