Performansta fark yok. Ancak, şu anda şemalar kullanıyorsunuz (bilmeseniz bile).
Şema referansların kullanımı, vb tablolar, saklanan prosedürler, UDF, gibi nesneler değildir şema kalifiye etmez bir performans etkisi vardır. Referanslar her zaman şema tarafından nitelendirilmelidir. Bu niteliksiz referansların çözülmesi gerekir ve bu şu şekilde olur:
- İlk olarak, aynı adı taşıyan bir nesneyi arayın ve kimlik bilgileri altında oturumun oluşturulduğu kullanıcının varsayılan şemasının altına yazın (örn.
jsmith
). Eğer bulunursa, o örnek kullanılır.
- Aksi takdirde, şema altında aynı ada ve türe sahip bir nesne arayın
dbo
.
Bunun birkaç etkisi vardır:
- Çoğu zaman, referans şema niteliyse gerekli olan tek arama yerine referansı çözmek için iki arama gerekir.
- Sorgu / saklı yordam / kullanıcı tanımlı işlev bağlandığında elde edilen yürütme planı önbelleğe alınamaz ve yeniden kullanılamaz.
Bir şey bozulduğunda yalnızca - acı verici bir şekilde - bulacağınız son etki, farklı kullanıcıların belirli bir sorgudan veya saklı yordamdan farklı sonuçlar alabilmesidir. Böyle bir şey select * from foo join bar
benim için db sahibi olarak iyi çalışabilir; jsmith
istemeden veya istemeyerek , aynı veritabanında foo
kendi şeması ( jsmith.foo
) altında bir tablo oluşturan kullanıcı için bozuk olabilir .
Bu nedenle de create
ve drop
ifadeler yaratılan veya bırakılan nesnenin adını şema nitelemelidir.