Повредит ли стол с varchar (255) ПЕРВИЧНЫЙ КЛЮЧ? - PullRequest
1 голос
/ 20 марта 2012

Я знаю, что это не очень хорошая идея, но я бы хотел еще раз проверить, не приведет ли это к чему-то сумасшедшему, например крушению сервера.

CREATE TABLE [dbo].[Items](
    [Id] [nvarchar](255) NOT NULL PRIMARY KEY,
    [Value] [nvarchar](max) NOT NULL,
)

Было бы интересно узнать подробности о том, как подобный ключ сравнивается с ключом [int], но достаточно лишь подтверждения, что это ничего не повредит.

Ответы [ 3 ]

5 голосов
/ 20 марта 2012

Вы можете использовать VARCHAR (#) в качестве первичного ключа?

Да.
С документация , VARCHAR(255) займет более257 (255 + 2) байт (зависит от длины фактических данных), для этого столбца - на строку .

Было бы интересно узнать подробности о том, какключ, подобный этому, сравнивается с ключом INT

INT занимает 4 байта, согласно документации .В зависимости от ваших данных, существуют числовые типы данных, которые занимают меньше места:

  • SMALLINT: 2 байта
  • TINYINT: 1 байт

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

Я бы сильно усомнился в необходимости такого большого VARCHAR в качестве первичного ключа - GUID даже не такие длинные.

1 голос
/ 20 марта 2012

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

На самом деле, вот SO ответ на вопрос производительности этого вопроса.

0 голосов
/ 20 марта 2012

Это приводит к снижению производительности, но не приводит к «краху сервера».

...