Ukuran penyimpanan untuk varchar adalah panjang sebenarnya dari data yang dimasukkan + 2 byte. Meskipun kolom itu sendiri memiliki overhead 2 byte, Anda dapat memasukkan hingga 900 byte nilai varchar ke dalam kolom yang diindeks.
Dalam praktiknya, Anda dapat membuat indeks pada kolom yang berukuran lebih dari 900 byte, tetapi Anda akan mendapat masalah jika Anda benar-benar mencoba menyisipkan sesuatu yang lebih besar dari 900 byte:
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.
Ketahuilah bahwa batas 900 byte mencakup semua kolom dari kunci indeks yang diberikan, seperti yang ditunjukkan contoh ini:
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
Untuk kolom ini yang biasanya terlalu besar untuk sebuah kunci indeks, Anda mungkin dapat memperoleh beberapa manfaat dari pengindeksan dengan memasukkannya ke dalam indeks.