2015-11-06 2 views
0

Мне нужно обновить столбец в большой таблице (более 30 миллионов строк), у которой нет первичного ключа. В строке таблицы есть уникальный столбец адресов электронной почты. Обновление включает в себя создание значения, которое должно иметь место на C# и добавления его к значению столбца. Поэтому строка должна быть прочитана, значение столбца обновлено и записано обратно.Обновление текущей строки с использованием ADO.NET

Я надеялся, что в ADO.NET существует концепция курсора, но я этого не вижу. Я могу читать строки достаточно быстро, но вызов обновления, используя предложение WHERE для адреса электронной почты, берет навсегда. После изучения этого большинства ответов, похоже, «поставить в первичный ключ!». но это не вариант. Есть предположения?

+2

Почему добавление первичного ключа не является вариантом ??? У вас есть хотя бы кластерный индекс? И да, если вы обновляете 30 миллионов строк, вызывая обновление для каждой строки, это будет продолжаться вечно. –

+0

У меня нет этой таблицы, поэтому я не могу добавить первичный ключ. –

+0

Имеет ли он кластеризованный индекс? –

ответ

1

Для рядов 30mil heap вариантов не так много. Без какого-либо индекса вы ничего не можете сделать, чтобы ускорить его.

Только решение для check a fragmentation кучи. Вы должны добавить кластерный индекс, чтобы облегчить фрагментацию таблицы, а затем немедленно отбросить его. Но если вы не можете каким-либо образом повлиять на эту таблицу, возможно, быстрее переместить все данные в новую таблицу :-)

+0

Иногда все просто невозможно, и я сообщил владельцам этой таблицы, что они собираются добавить индекс. –

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