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