Benim tahminim bu uygulama nedeniyle bir kısıtlama olduğunu. Birden fazla masada bu ayara izin vermek potansiyel bir performans isabeti idi:
Bu bir oturum parametresi olduğundan, ayarın tek bir tabloda etkinleştirilmesine izin vermek, basit bir bayrak olduğu ve tablonun nesne kimliğinin sunucu tarafında oturumda saklanacağı anlamına gelir. Belki de bu sadece tek bir tamsayıdır: IDENTITY_INSERT etkin değilse 0 ve tablo için databaseid + objectid kodlaması.
Parametrenin bir oturumda birden çok tabloya ayarlanmasına izin vermek, sunucunun bu tür nesnelerin dinamik bir listesini depolayacağı ve her ekleme ifadesi için kontrol edeceği anlamına gelir. Bir oturumun bin tablo için parametreyi etkinleştirdiğini düşünün:
- Bu, sunucunun oturum değişkenine 1000 öğe ayırdığı anlamına gelir
- Bu, sunucunun bu oturumdaki her ekleme ifadesi için 1000 öğenin listesini kontrol etmesi gerektiği anlamına gelir.
Ayrıca set identity_insert üzerinde sunucuda bir performans geniş performans isabet şüpheli. Sybase'de sadece bir kez kaydedilecek bir tablonun kimlik sayacının değerini kaydetmeye izin veren bir " kimlik yazma seti faktörü " vardı (değer bellekte tutulur ve arada bir ve sunucuda diske yazılır kapat ). SQL Server aynı koda dayanmaktadır, bu nedenle muhtemelen bazı karşılaştırılabilir optimizasyona sahiptir, ancak bir tablodaki identity_insert'i etkinleştirmek, sunucuyu her ekleme için kimlik değerini kaydetmek için muhtemelen kısıtlar, çünkü başka bir maksimum boşluk boyutunu garanti edemez. Bir oturum bir tablodaki ekler üzerinde bir performans isabeti yaparsa, bu muhtemelen kabul edilebilir, ancak sunucudaki tüm auto_increment tablolarında perf vuruşunu yapamazsa ..