Иногда объединение происходит в полях, которые не являются «полями объединения», потому что это просто природа запроса (например, большинство способов идентификации записей, которые являются дубликатами в определенном столбце). Если требуемый запрос относится к этим значениям, то это будет соединение, конец истории.
Если поле действительно идентифицирует строку, то его можно использовать в качестве ключа. Это даже возможно сделать, если он может измениться (он вызывает проблемы, но не непреодолимые проблемы), пока он остается подлинным идентификатором (он никогда не изменится на значение, существующее для другой строки).
Влияние на производительность зависит от общего запроса и базы данных. В зависимости от базы данных тип стратегий индексации некоторых делает их лучше при использовании varchar и других текстовых ключей, чем другие базы данных (в частности, хороши хэш-индексы).
Обычные запросы могут быть такими, что использование varchar становится более производительным даже без хеш-индексов. Классическим примером является хранение фрагментов текста для многоязычного веб-сайта. Каждый такой фрагмент текста будет иметь определенный languageID, относящийся к языку, на котором он находится. Однако получение другой информации об этом языке (его название и т. Д.) Редко требуется; гораздо чаще нужно либо фильтровать по коду RFC 5646, либо выяснить, что это за код RFC 6546. Если мы используем числовой идентификатор, то для получения этого кода нам потребуется объединиться для обоих типов запросов. Если мы используем код в качестве идентификатора, то наиболее распространенные запросы, связанные с языком, вообще не нужно будут искать в языковой таблице. Большинству запросов, которые заботятся о деталях языка, также не требуется выполнять какое-либо соединение; Практически единственный раз, когда ключ будет использоваться в качестве внешнего ключа, заключается в поддержании ссылочной целостности при обновлении и вставке текста или при удалении языков. Следовательно, хотя объединение менее эффективно, когда оно используется, система в целом будет более эффективной, если использовать меньше объединений.