私は自分のデータベース(Oracle)を設計する必要があるプロジェクトのこの時点にいます。通常、ステータス テーブルと国テーブルでは、数値の主キーは使用しません。たとえば、
STATUS (max 6)
AC --> Active
DE --> Deleted
COUNTRIES (total 30)
UK --> United Kingdom
IT --> Italy
GR --> Greece
これらのテーブルは静的であり、アプリケーションを通じて更新されず、将来変更されることは予測されないため、これらの値を外部キーとして使用するテーブルで更新の問題が発生する可能性はありません。
アプリケーションのメイン テーブルは、ステータスと国 (複数回、例: 出発地の国、目的地の国) を使用し、年間 600000 行が追加されることが予想されます。
私の質問は、これらの VARCHAR(2) キーは、3 つのテーブルの結合をクエリするときにパフォーマンスに影響を与えるでしょうか。最初のものは 2 番目のものよりも大幅に遅くなりますか?
SELECT m.*,
s.status_name,
c.country_name
FROM main m, status s, countries c
WHERE m.status_cd = s.status_cd
AND m.country_cd = c.country_cd
AND m.status_cd = 'AC'
AND m.country_cd = 'UK'
SELECT m.*,
s.status_name,
c.country_name
FROM main m, status s, countries c
WHERE m.status_cd = s.status_cd
AND m.country_cd = c.country_cd
AND m.status_cd = 1
AND m.country_cd = 2
説明:
ステータスはバイナリではありません (テーブル名の横にある「最大 6」)。値はおそらく次のようになります。
* active
* deleted
* draft
* send
* replaced
デコードされた値をユーザーに表示する必要があるため、名前が必要です。