основная вставка с индексом или без - PullRequest
7 голосов
/ 08 декабря 2008

В комментарии я прочитал

Как примечание, иногда быстрее удалить индексы таблицы и воссоздать их после операции массовой вставки.

Это правда? При каких обстоятельствах?

Ответы [ 3 ]

8 голосов
/ 08 декабря 2008

Как и в случае с Джоэлем, я повторю утверждение, что да, это может быть правдой. Я обнаружил, что ключом к определению сценария, который он упомянул, является распределение данных и размер индекса (ов), который у вас есть в конкретной таблице.

В приложении, которое я использовал для поддержки, которое выполняло обычный массовый импорт 1,8 миллиона строк, с 4 индексами в таблице, 1 с 11 столбцами и в общей сложности 90 столбцами в таблице. Импорт с индексами занял более 20 часов. Удаление индексов, вставка и повторное создание индексов заняли всего 1 час 25 минут.

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

6 голосов
/ 08 декабря 2008

Да, это правда. Если во время вставки имеются индексы в таблице, серверу необходимо постоянно переупорядочивать / разбивать на страницы таблицы, чтобы поддерживать актуальность индексов. Если вы отбросите индексы, он может просто добавить строки, не беспокоясь об этом, а затем создать индексы сразу, когда вы заново создадите их.


Исключением, конечно, является случай, когда данные импорта уже находятся в порядке индекса. На самом деле, я должен отметить, что сейчас я работаю над проектом, в котором наблюдался этот противоположный эффект. Мы хотели сократить время выполнения большого импорта (ночной дамп из системы мэйнфреймов). Мы попытались удалить индексы, импортировать данные и воссоздать их. На самом деле значительно увеличило время завершения импорта. Но это не типично. Это просто говорит о том, что вы всегда должны сначала тестировать свою конкретную систему.

2 голосов
/ 09 декабря 2008

Одна вещь, которую вы должны учитывать при удалении и воссоздании индексов, это то, что это следует делать только на автоматизированных процессах, которые выполняются в периоды использования базы данных с низким объемом. Пока индекс удален, он не может использоваться для других запросов, которые могут одновременно выполняться другими пользователями. Если вы сделаете это в рабочее время, ваши пользователи, вероятно, начнут жаловаться на тайм-ауты.

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