Tebakan saya adalah pembatasan karena implementasi. Mengizinkan pengaturan ini pada beberapa tabel adalah performa yang potensial:
Karena ini adalah parameter sesi, memungkinkan pengaturan untuk diaktifkan pada tabel tunggal berarti bahwa itu adalah flag sederhana dan id objek tabel untuk disimpan pada sesi, sisi server. Mungkin ini hanya satu bilangan bulat: 0 jika tidak ada IDENTITY_INSERT aktif, dan beberapa pengkodean databaseid + objectid untuk tabel.
Mengizinkan parameter ditetapkan pada beberapa tabel dalam satu sesi akan berarti bahwa server akan menyimpan daftar objek yang dinamis dan memeriksanya untuk setiap pernyataan penyisipan. Bayangkan sebuah sesi mengaktifkan parameter untuk seribu tabel:
- Ini berarti server telah mengalokasikan 1000 item dalam variabel sesi
- Ini juga berarti bahwa server harus memeriksa daftar 1000 item untuk setiap pernyataan penyisipan dalam sesi ini.
Saya juga curiga bahwa set identity_insert on memiliki kinerja yang sangat baik di server. Dalam sybase ada " faktor pembakaran identitas ", yang memungkinkan untuk menyimpan nilai penghitung identitas suatu tabel untuk disimpan hanya sesekali (nilai disimpan dalam memori dan ditulis ke disk sesekali dan di server matikan ). SQL Server didasarkan pada kode yang sama sehingga mungkin memiliki beberapa optimasi yang sebanding, tetapi mengaktifkan identity_insert di atas meja mungkin membatasi server untuk menyimpan nilai identitas untuk setiap sisipan, karena selain itu tidak dapat menjamin ukuran celah maksimum. Jadi, jika satu sesi membuat hit kinerja pada sisipan dalam satu tabel ini mungkin dapat diterima, tetapi tidak jika itu dapat membuat perf hit pada semua tabel auto_increment di server ..