Index Key Toplamı 900 Byte’dan Büyük Index Oluşturmaktan Sakının
SQL Server’da 900 byte’ı geçen varchar kolonlar üzerine Index tanımlaması yapılabilmektedir. Fakat böyle bir index’e 900 byte’dan daha büyük bir kayıt insert’i ya da update’i yapıldığında hata alınacaktır. Bu yüzden Index Key toplamı 900 byte’dan büyük olan Index create etmemeye özen göstermekte fayda vardır.
Normal şartlarda char gibi sabit boyutlu bir key ya da key’ler üzerine tanımlanan index 900 byte’ı geçiyorsa tanımlama esnasında hata alır.
create table tbl_Char900Byte(a char(400), b char(400), c char(400))
GO
create clustered index IX_1 on tbl_Char900Byte(a,b,c)
GO
Msg 1944, Level 16, State 1, Line 1
Index 'IX_1' was not created. This index has a key length of at least 1200 bytes. The maximum permissible key length is 900 bytes.
Aynı index varchar gibi değişken boyutlu key’ler üzerine tanımlanırsa sadece uyarı verilerek index create edilecektir.
create table tbl_VarChar900Byte(a varchar(400), b varchar(400), c varchar(400))
GO
create clustered index IX_1 on tbl_VarChar900Byte(a,b,c)
GO
Warning! The maximum key length is 900 bytes. The index 'IX_1' has maximum length of 1200 bytes. For some combination of large values, the insert/update operation will fail.
Giriş bölümünde de belirttiğim üzere SQL Server böyle bir index’in oluşturulmasına izin vermesine rağmen bu şekilde index’ler create etmemeye özen göstermeliyiz. Çünkü bu index’ler üzerine yapılacak 900 byte’dan büyük insert-update işlemleri hata alacaktır.
insert into tbl_VarChar900Byte(a,b,c)
values (REPLICATE('A',400),REPLICATE('B',400),REPLICATE('C',400))
Msg 1946, Level 16, State 3, Line 1
Operation failed. The index entry of length 1200 bytes for the index 'IX_1' exceeds the maximum length of 900 bytes.
İyi Çalışmalar
Turgay Sahtiyan