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