Сейчас я подошел к тому моменту моего проекта, который мне нужен для проектирования моей базы данных (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
и нам нужно отобразить декодированные значения пользователю, поэтому нам нужны имена.