3

2 つのテーブルを使用して、Oracle で SQL 結合クエリを作成しました。クエリを作成している間、select 句で列を参照するためにテーブル エイリアスを使用しませんでした。選択した列が両方のテーブルで異なる名前を持っていたため、これが可能になりました。

したがって、質問は次のとおりです。両方のテーブルに同様の列名があるにもかかわらず、テーブルのエイリアスを使用して列を選択する必要がありますか (パフォーマンスの観点から)?

注意: 現在、「列を選択するためにテーブル エイリアスを指定しない結合クエリの場合、オラクルは常にテーブル メタデータを検索して、どのテーブルにこの列があるかを調べる」という印象を受けています。それで、私の仮定は本当ですか?

ありがとう、ハヌマント

4

2 に答える 2

4

いいえ、あなたの仮定は正しくありません。

テーブル エイリアスを使用する理由は少なくとも 4 つあります。

  • エイリアスが名前より短い場合は、入力する量を減らすことができます。
  • テーブルを自己結合する場合、それらを区別できるように、一方または両方のテーブルにエイリアスを与える必要があります。
  • 一部のデータベースシステムでは、派生テーブルにエイリアスが必要です(ただし、Oracleではないと思います)。
  • エイリアスは、その特定のクエリにおけるテーブルの役割をより明確にすることができます。

これらを使用してもパフォーマンスが大幅に低下することはありません。

于 2011-10-12T05:51:36.007 に答える
0

簡単にするために...

これは失敗します

select 
ID,
ID
from table1 
inner join table2  on table1.ID = table2.AnotherID

これは失敗しません

select 
a.ID,
b.ID
from table1 a
inner join table2 b on a.ID = b.AnotherID

最初の 1 つが失敗する理由は、最適化エンジンが ID フィールドを取得するテーブルを認識していないためです。エイリアスを使用すると、使用するテーブルに関する「ヒント」を与えることができます。エイリアスは、完全なテーブル名の代わりにすぎません。

また、別名テーブルにアクセスしようとする場所にも注意する必要があります。詳細については、SQL 操作の順序を確認してください。

于 2011-10-13T00:38:02.003 に答える