#sql #sql-server #bulkinsert #clustered-index
#sql #sql-сервер #bulkinsert #кластеризованный индекс
Вопрос:
Помогает или нет кластеризованный индекс с точки зрения производительности при массовой вставке сотен миллионов строк в таблицу?
ФАЙЛ: после вставки я должен запустить базу данных в производство, поэтому мне придется создать один или несколько индексов.
Комментарии:
1. Существует только один правильный ответ. Вы тестируете оба способа и оцениваете результаты. Единственное, на что вы здесь влияете, это время потребления ресурсов, необходимое для упорядочивания страниц данных в таблице для кластеризованного индекса. Если вы удалите, а затем заново создадите кластеризованный индекс, вы фактически переведете таблицу в автономный режим. Выбирайте внимательно.
Ответ №1:
Кластеризованный индекс указывает, что данные упорядочены на страницах данных.
При вставке данных новые данные должны быть отсортированы и сравнены с существующими значениями. Это приведет к накладным расходам.
Единственное исключение — это когда у вас есть столбец идентификатора, который создается во время вставки. Тогда база данных знает, что новые данные отправляются «в конец» таблицы.
Ответ №2:
Индексы предназначены для ускорения извлечения (ВЫБОРА) строк. Они имеют антиэффект только в отношении ВСТАВКИ, УДАЛЕНИЯ или ОБНОВЛЕНИЯ. И, в вашем случае, если ВСТАВКА является основной операцией, выполняемой в вашей системе, не используйте индексы вообще. Даже в вашей производственной системе оцените соотношение между операциями извлечения и операциями вставки / обновления, и если окажется, что операция извлечения будет доминирующей, тогда вы можете подумать об индексах.
Примечание: Всякий раз, когда мы определяем первичный ключ в таблице, для этой таблицы уже создается базовая структура индекса. Таким образом, без какой-либо конкретной необходимости в оптимизации поиска нет реальной необходимости разрабатывать и внедрять индексы.
Вы можете узнать больше здесь: https://www.geeksforgeeks.org/sql-indexes /
Комментарии:
1. согласен, однако, как я уточнил в своем вопросе, после вставок мне все равно придется создавать индексы (включая кластеризованный), поэтому мне нужна общая скорость и производительность
2. «вообще не используйте индексы» — ерунда. «Всякий раз, когда мы определяем первичный ключ … базовая структура индекса уже создана»? Что это вообще значит? Это ссылка на поведение по умолчанию при создании кластеризованного индекса для поддержки PK?
3. ДА. Я имел в виду только создание кластеризованного индекса по умолчанию. И, говоря «вообще не использовать индексы», я имел в виду, что нам не нужно думать больше, чем индексы по умолчанию, если основной операцией будет ВСТАВКА или ОБНОВЛЕНИЕ.