2016-10-20 3 views
-4

У меня есть таблица кучи 36 миллионов строк, я пытаюсь удалить выбранные 6 миллионов строк. Когда я удаляю в 100 партиях, чтение составляет 16 ++++++, а запись равно 113, поэтому я добавляю индекс NON-clus в столбец Identity, чтобы читать быстрее, теперь прочитано 34899, а запись - 3508 с добавлением одного NON-clus Idx это увеличивает стрельбу записи IO.SQL Server: что происходит в delete с индексом

Итак, что нужно знать, почему это большое различие, что делает SQL Server в фоновом режиме, как в плане, я вижу, что удаление таблицы составляет 8% и не более подробная информация.

Кроме того, когда я удалить мои страницы данных и используемые страницы становятся увеличивается, невероятно .. я запрашиваю sys.allocation единиц проверить

При удалении 2500 на строки моего увеличения файла журнал до 42 МБ и фрагментация растет из 0,02 до 2,96

Просто, чтобы добавить больше, прежде чем делать это я бросаю 2 колонки NVARCHAR и очистить таблицу и восстановить его

+0

Я немного понимаю ваш вопрос как ИНФОРМАЦИЮ, а не ВОПРОС. – GNMercado

+0

Если у вас есть куча и удаление без подсказки TABLOCK, SQL Server не освобождает место. Это делает его, конечно, более простым, но в какой-то момент вам нужно что-то сделать для потраченного впустую пространства ... –

ответ

0

Измените некластерный индекс кластерного индекса. Когда вы удаляете строки из таблицы, SQL Server должен удалять страницы из кучи и страниц из индексов. Если у вас есть кластерный индекс, SQL Server должен удалить только строки из этого индекса.

+0

Спасибо :) Я действительно изменился .. теперь прочитано 252, что считается лучшим в этом ситуация. Но когда я добавляю еще один некластерный индекс с еще четырьмя столбцами (nvarchar, int, money), он снова читает до 1300. Это поведение или мне нужно рассмотреть fillfactor для этого? – Spinach

+0

Любое удаление должно удалить данные из таблицы и индексов. –

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