Следует ли мне избегать использования первичного ключа и использовать индексированный уникальный столбец? - PullRequest
2 голосов
/ 08 апреля 2011

Я создал новую таблицу без первичного ключа. Но у таблицы есть одно поле, которое уникально и проиндексировано.

Этот столбец имеет уникальные значения, и я могу сделать его Первичным. Но какое влияние это окажет на производительность SQL и на какой другой фактор повлияет, если он не будет основным?

Привет

Ответы [ 4 ]

6 голосов
/ 08 апреля 2011

Если столбец может содержать значения NULL, то он не может быть первичным ключом. В этом случае уникальный индекс - лучшее, что вы можете сделать (обратите внимание, что это не мешает иметь несколько строк со значениями NULL).

Если он никогда не будет содержать NULL значений, то вам определенно следует либо добавить ограничение NOT NULL для столбца, либо сделать его первичным ключом. В любом случае, это говорит оптимизатору, что столбец никогда не будет иметь значений NULL, что позволяет ему учитывать некоторые виды оптимизации запросов, которые в противном случае были бы невозможны.

Не думаю, что будет существенная разница в производительности между (a) ограничением первичного ключа и (b) сочетанием уникального индекса и ограничения NOT NULL. В любом случае оптимизатор предоставляет ту же информацию о содержимом таблицы. Любой из них также может быть использован в качестве цели внешнего ключа. Однако есть некоторые специфические особенности, которые требуют существования первичного ключа - например, таблица с индексами должна иметь один.

4 голосов
/ 08 апреля 2011

Первичный ключ никогда не может быть NULL, тогда как столбец с ограничением UNIQUE может быть.

2 голосов
/ 08 апреля 2011

Нет принципиальной или практической разницы между «первичным» ключом-кандидатом и любым другим ключом-кандидатом.Важным моментом является то, что в таблице должны быть ограничения, обеспечивающие столько ключей, сколько необходимо для обеспечения целостности данных (хотя бы один ключ).Первичный ключ настолько полезен или необходим, насколько вы можете его создать, хотя разработчикам и другим пользователям часто очень удобно выделять тот или иной ключ для той или иной цели.

2 голосов
/ 08 апреля 2011

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

Основное эмпирическое правило для проектирования и производительности таблиц SQL: используйте то, что доступно, и не пытайтесь обдумать тысячи, а может, и миллионы инженерных часов, затраченных на создание такой надежной СУБД. В большинстве случаев первичный и внешний ключи будут использоваться правильно, а оптимизатор запросов выберет лучший сценарий выполнения для вас.

...