Добавить первичный ключ в таблицу с существующим кластерным индексом - PullRequest
5 голосов
/ 09 августа 2010

Мне нужно работать с базой данных для составления отчетов. БД довольно большая: 416 055 104 строки. Каждая строка очень легкая, только логические и внутренние идентификаторы.

Каждая строка идентифицируется 3 столбцами,но, к моему удивлению, на нем нет первичного ключа.Только кластерный индекс с уникальным ограничением.

Итак, зная, что у меня есть 2 вопроса.

  1. Может ли быть для этого ЛЮБАЯ веская причина?
  2. Можно ли как-нибудь превратить это в первичный ключ.

По вопросу 2

Создание нового первичного ключа также создаетнекластеризованный индекс для связи (уже существует кластеризованный индекс).
Это , а не , что я ищу.Я хочу сохранить тот же индекс, но также сделать его первичным ключом.

  • Возможно ли это?
  • Это будет быстрее, чем снова создать весь индекс?(Надеюсь на это)
  • Какие могут быть последствия?(блокирует? сбой? поврежденные данные?)

Ответы [ 3 ]

2 голосов
/ 09 августа 2010

Хороший вопрос.

Если у вас уже есть уникальный индекс для столбцов, не допускающих значения NULL, то у вас есть ключ-кандидат. Я не знаю какой-либо конкретной выгоды сделать этот «официальный» первичный ключ. На самом деле у меня такое ощущение, что если не сделать ПК, это даст большую гибкость.

2 голосов
/ 09 августа 2010

Существует мало или нет различий между ПЕРВИЧНЫМ КЛЮЧОМ и УНИКАЛЬНЫМ ограничением для столбцов, не допускающих значения NULL.Так что, если столбцы, о которых идет речь, не являются необнуляемыми, то я предлагаю вам ничего не делать.Основная причина превращения ключа-кандидата в первичный ключ заключается в том, что у вас есть какое-либо программное обеспечение (такое как инструмент моделирования данных или другой инструмент разработки), которое ожидает, что ключ будет идентифицирован с ограничением PRIMARY KEY.

1 голос
/ 09 августа 2010
  1. Уникальный индекс может разрешить ноль ценности. Первичный ключ не может.

  2. Я считаю, что вы не можете "пометить" существующий индекс в качестве первичного ключа. Вы должны были бы бросить это и воссоздать. Чтобы избежать чего-либо, я бы сказал, что было бы неплохо поместить TABLOCKX, HOLDLOCK на стол, прежде чем делать это.

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