Теперь я нахожусь к этому моменту своего проекта, что мне нужно создать мою базу данных (Oracle). Обычно для таблиц состояния и стран я не использую числовой первичный ключ, например
STATUS (max 6)
AC --> Active
DE --> Deleted
COUNTRIES (total 30)
UK --> United Kingdom
IT --> Italy
GR --> Greece
Эти таблицы являются статическими, не обновляемыми в приложении и не предполагают изменения в будущем, поэтому нет никаких проблем с обновлением в таблицах, которые будут использовать эти значения в качестве внешних ключей.
Основная таблица приложения будет использовать статус и страну (более одного раза, например, страну происхождения, страну назначения), и предполагается, что в год будет добавлено 600000 строк.
Итак, мой вопрос в том, будут ли эти ключи VARCHAR (2) оказывать влияние на производительность при запросе соединения 3 таблиц. Первый будет значительно медленнее второго?
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
Разъяснение:
Состояние не является двоичным ( "max 6" рядом с именем таблицы). Значения, вероятно, будут:
* active
* deleted
* draft
* send
* replaced
и нам нужно отобразить декодированные значения для пользователя, поэтому нам нужны имена.