Являются ли многоколонные первичные ключи в MySQL проблемой оптимизации? - PullRequest
3 голосов
/ 06 октября 2009

Я изучал использование первичных ключей из нескольких столбцов и, поскольку производительность чрезвычайно важна для объема трафика и базы данных, мне нужно знать, есть ли что-то, что нужно рассмотреть, прежде чем я начну выбрасывать метод уникального идентификатора во многих моих таблицах и начните использовать первичные ключи столбцов с несколькими строками.

Итак, каковы плюсы / минусы производительности / оптимизации при использовании многостолбечных первичных ключей по сравнению с базовым одиночным столбцом, первичным ключом auto-inc?

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Есть ли какая-то конкретная причина, по которой вам нужно / хотите использовать многостолбцовые ключи вместо (я полагаю) уже созданного одностолбцового ключа?

Одна из проблем с Natural Keys связана с каскадным обновлением значения ключа для всех внешних ключей. Суррогатный ключ, такой как столбец автоинкремента, избегает этого.

С точки зрения производительности, в зависимости от количества строк, типов данных столбцов, механизма хранения и объема оперативной памяти, выделенной для MySQL, ключи из нескольких столбцов могут влиять на производительность из-за огромного размера индекс.

По моему опыту, с точки зрения разработки и обслуживания почти всегда проще использовать суррогатный ключ в качестве PK, а затем создавать индексы, которые покрывают ваши запросы по естественным ключам. Однако единственный способ определить истинное влияние на производительность вашего приложения - сравнить его с реалистичной реалистичной нагрузкой и набором данных.

HTH -

Chris

0 голосов
/ 07 октября 2009

Не думаю, что возникнут проблемы с производительностью при использовании нескольких первичных ключей. Это более или менее эквивалентно наличию нескольких индексов (при вставке вы потратите немного больше времени на вычисление значений индекса).

Иногда модель данных имеет больше смысла с несколькими ключами. Во-первых, я беспокоюсь о простоте, а потом о производительности. Вы всегда можете добавить больше индексов, улучшить свои запросы или настроить параметры сервера.

Я думаю, что больше всего я столкнулся с первичным ключом из 4 столбцов. Заставляет меня немного съеживаться, но это сработало & sup1;.


[1] «обработано» определяется как « приложение, выполненное в соответствии со спецификацией », и не подразумевает, что фактические задачи были выполнены с использованием указанного приложения. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...