Как оптимизировать обновление огромной таблицы, соединяющейся с другой таблицей? - PullRequest
0 голосов
/ 13 февраля 2019

Я нахожусь в среде хранилища данных и имею требование, чтобы для существующей таблицы (скажем, таблицы «A») с приблизительно 450 столбцами и 100 миллионами записей в таблице, нужно было добавить еще 50 столбцов, однако в качестве таблицыуже огромен и широк, и исходная система не может его вместить, я буду получать и загружать расширенную таблицу (скажем, таблицу «B») с 50 новыми столбцами и SurrogateKey в обеих таблицах, так что новая таблица такжесобирается провести 100 миллионов записей.Но 51 колонна.SurrogateKey в таблице B является столбцом Identity, поэтому он сам генерирует ключ.

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

Для поддержанияSurrogateKey в таблице A, после загрузки обеих таблиц мне потребуется запустить процедуру, содержащую приведенный ниже код, чтобы обновить SK в A:

Update A
SET SK=B.SK
from A JOIN B
ON A.c1=B.c1 AND
A.c2=B.c2 AND
A.c3=B.c3 AND
A.c4=B.c4

Учитывая, что у меня нет PK или какого-либо индекса надля обеих таблиц, какова будет рекомендация добавить PK или индексы, чтобы я получил максимальную производительность при обновлении таблицы A, а также при объединении A и B.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

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

Короче говоря,

  1. Создайте временную таблицу с такой же структурой, как у таблицы A.
  2. Загрузите данные из таблицы A во временную таблицу и обновите суррогатный ключ, используя таблицу B (наличие индексов, которые помогут быстрее читать).
  3. Усекать таблицу A и загружать обновленные данные из временной таблицы.

Надеюсь, этот подход должен помочь.Дайте мне знать, если это работает для вас.

0 голосов
/ 13 февраля 2019

Эта статья может объяснить вам лучшее понимание.

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