パフォーマンスに違いはありません。しかし、あなたは今スキーマを使用しています(たとえあなたがそれを知らなくても)。
スキーマ修飾されていないテーブル、ストアドプロシージャ、UDFなどのスキーマオブジェクトへの参照を使用すると、パフォーマンスに影響があります。参照は常にスキーマで修飾する必要があります。このような修飾されていない参照は解決する必要があり、それは次のように行われます。
- 最初に、セッションが確立された資格情報を持つユーザーのデフォルトスキーマの下で、同じ名前とタイプのオブジェクトを探します(例:)
jsmith
。見つかった場合、そのインスタンスが使用されます。
- それ以外の場合は、スキーマの下で同じ名前とタイプのオブジェクトを探します
dbo
。
これにはいくつかの影響があります:
- ほとんどの場合、参照がスキーマ修飾されている場合、必要な単一のルックアップではなく、参照を解決するために2つのルックアップが必要です。
- クエリ/ストアドプロシージャ/ユーザー定義関数がバインドされたときに取得された実行プランは、キャッシュして再利用できません。
何かが壊れたときにのみ(苦痛に)見つかる最後の効果は、特定のクエリまたはストアドプロシージャから異なるユーザーが異なる結果を得る可能性があることです。次のようなものselect * from foo join bar
が、db所有者として私にとってはうまく機能する場合があります。同じデータベースに自分のスキーマ()でjsmith
名前が付けられたテーブルを誤って作成したかどうかに関係なく、壊れる可能性があります。foo
jsmith.foo
このため、あまりにも、create
そしてdrop
ステートメントが作成または削除されるオブジェクトの名前をスキーマ修飾する必要があります。