На ваш точный вопрос с такой маленькой схемой, чтобы выгрузить содержимое исходной таблицы Messages , денормализованный будет быстрее. План запросов будет меньше и его легче будет оптимизировать, и не будет никаких затрат на присоединение.
В общем, намного, намного сложнее.
Правильно ли это делать - вопрос. Для этого начните с нормализованного дизайна, но будьте готовы и готовы денормализовать, если для этого есть веская причина. Иногда существуют веские причины для денормализации, хотя обычно нормализованные данные компенсируют любую потерю производительности.
Нормализованные данные легче поддерживать и, как правило, они более гибкие. Для большей гибкости наличие числового pkey позволяет иметь несколько человек с одинаковыми именами. Вы можете легко добавить больше полей к People . Проще запустить отчет, чтобы увидеть всех людей в системе, не сканируя все Сообщения .
Но производительность может быть фактором. Учитывая данные в двух таблицах, база данных имеет несколько вариантов, как присоединиться. Он может использовать либо People , либо Messages в качестве базовой таблицы, и то, как будет выполнено соединение, повлияет на вещи (вложенные циклы, объединения хешей, сортировку / объединение и т. Д.).
Но, кроме того, нормализация может на быстрее . Что если ваша схема сложнее, чем вы описываете? Допустим, ваша таблица People содержит 50 полей, связанных с персоналом, а ваша таблица Messages имеет только одно поле сообщения из 20 символов. Если у вас есть случай с двумя людьми, но 100 000 сообщений, денормализованный будет на самом деле быстрее. Это потому, что ввод-вывод является самым большим ограничивающим фактором для баз данных Если вы должны выгрузить все данные в одном запросе, нормализованные данные будут извлекать эти 50 полей только один раз, а ваша таблица Messages будет плотно упакована данными. В денормализованной версии каждая строка Messages будет содержать 51 поле, и вы значительно увеличите количество операций ввода-вывода, чтобы получить тот же результат.