Bez różnicy w wydajności. Jednak używasz teraz schematów (nawet jeśli go nie znasz).
Zastosowanie odwołań do obiektów schematu, takich jak tabele, procedury składowane, UDF itp., Które nie są zakwalifikowane do schematu , ma wpływ na wydajność. Referencje powinny zawsze być kwalifikowane według schematu. Takie niekwalifikowane odniesienia muszą zostać rozwiązane, a dzieje się tak:
- Najpierw poszukaj obiektu o tej samej nazwie i typie w domyślnym schemacie użytkownika, na podstawie którego poświadczenia została ustanowiona sesja (np
jsmith
.). Jeśli zostanie znaleziony, używana jest ta instancja.
- W przeciwnym razie poszukaj obiektu o tej samej nazwie i typie pod schematem
dbo
.
Ma to kilka efektów:
- W większości przypadków potrzebne są dwa wyszukiwania, aby rozstrzygnąć odwołanie, zamiast pojedynczego wyszukiwania, jeśli odwołanie jest zakwalifikowane do schematu.
- Plan wykonania uzyskany po związaniu zapytania / procedury składowanej / funkcji zdefiniowanej przez użytkownika nie może być buforowany i ponownie używany.
Ostatnim efektem, który można znaleźć - boleśnie - gdy coś się psuje, jest to, że różni użytkownicy mogą uzyskać różne wyniki z danego zapytania lub procedury składowanej. Coś takiego select * from foo join bar
może działać dobrze dla mnie jako właściciela bazy danych; może być uszkodzony dla użytkownika, jsmith
który nieumyślnie lub nie, utworzył tabelę nazwaną na foo
podstawie własnego schematu ( jsmith.foo
) w tej samej bazie danych.
Z tego powodu też, create
i drop
oświadczenia powinny schematu zakwalifikować nazwę tworzonego obiektu lub spadła.