Ответ 1
Мнения не имеют значения, когда вы можете измерить.
Я реализовал это на PostgreSQL, используя как естественные ключи, так и суррогаты. Я использовал 300 000 продуктов в общей сложности, 180 ингредиентов и заполнил две таблицы "ингредиентов" с 3-17 ингредиентами на продукт, для 100 000 случайно выбранных продуктов (1053462 строки).
Выбор всех ингредиентов для одного продукта с использованием натуральных ключей, возвращаемых в 0.067 мс. Использование суррогатов, 0.199мс.
Возврат всех столбцов non-id для одного продукта с использованием натуральных ключей, возвращаемых в 0.145 ms. Использование суррогатов, 0.222 мс
Таким образом, естественные ключи в этом наборе данных были примерно в 2 - 3 раза быстрее.
Натуральные ключи не требуют каких-либо объединений для возврата этих данных. Суррогатные ключи требуют двух соединений.
Фактическая разница в производительности зависит от ширины ваших таблиц, количества строк, размера страницы и длины имен и тому подобного. Там будет точка, где суррогатные ключи начинают превосходить естественные ключи, но мало кто пытается это измерить.
Когда я занимался разработкой базы данных для рабочей базы моего работодателя, я построил стенд с таблицами, разработанными вокруг натуральных клавиш и таблицами, созданными вокруг номеров идентификаторов. Обе эти схемы содержат более 13 миллионов строк сэмплированных данных, генерируемых компьютером. В некоторых случаях запросы по схеме номера номера превосходили схему естественных ключей на 50%. (Таким образом, сложный запрос, который занимал 20 секунд с номерами идентификаторов, занял 30 секунд с естественными ключами.) Но 80% тестовых запросов имели более высокую производительность SELECT против схемы естественных ключей. И иногда это было ошеломляюще быстрее - разница в 30 к 1.
Мы ожидаем, что естественные ключи будут превосходить суррогаты в нашей базе данных на долгие годы. (Если мы не переместим некоторые таблицы на SSD, в этом случае естественные ключи, вероятно, превзойдут суррогаты навсегда.)