2015-03-18 7 views
0

Мне нужно увеличить varchar одного столбца от 64 до 80. Таблица довольно большая (9 м строк). Один момент, который делает изменение неопределенным, заключается в том, что столбец также индексируется.Изменить таблицу, чтобы изменить размер индекса

Итак, если я изменяю столбец, так как столбец является одним из индексов, произойдет ли какая-либо блокировка для строки или таблицы?

Спасибо.

+0

См. Также http://stackoverflow.com/a/4849030/1394393. Моим советом было бы избавиться от длины от типа 'VARCHAR' *, пока у вас есть шанс. При необходимости замените его на ограничение, как описано в связанном ответе/статье. – jpmc26

+0

Звучит так, что варчар не является хорошим вариантом с самого начала. Похоже, я должен сначала изменить столбец на текст, а затем добавить некоторое ограничение снаружи. Но «текст» выглядит не очень хорошо для индекса и в моем первом ощущении, верно? – user4604022

+0

'text' и' varchar' точно такие же, когда длина 'varchar' не задана. Даже с длиной, они оба все еще реализованы одинаково под капотом. Учитывая, что все основные типы текста имеют одну и ту же базовую реализацию, я бы * чрезвычайно * удивился, если бы индекс выполнялся по-разному для любого из них. Недостатки, обсуждаемые в этой статье, связаны с ограничениями длины (за исключением 'char', который имеет странное поведение из-за устаревших стандартов). – jpmc26

ответ

0

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

drop index [[index name]] 
go 

alter table t1 [[alter column]] 
go 

create index [[index name]] 
go 
+0

Да, точно. Но у меня есть много параллельных запросов, использующих этот индекс. Если отбросить индекс, я думаю, что он выдует db вскоре до того, как будет закончен. – user4604022

+0

Я все еще думаю, что единственный способ - сначала отбросить индекс. У вас есть какой-нибудь экземпляр db, где вы можете попробовать это первым? –

+0

Я попытался сбросить, изменить, а затем создать снова, но без большого трафика, поэтому все еще не уверен в этом. – user4604022

Смежные вопросы