Плохая практика Datawarehouse?

В нашем контексте Datawarehouse мы должны обновить некоторые таблицы на самом деле в нашем ETL.

Мы только что создали некластеризованные индексы перед самыми тяжелыми запросами и потом их отбросим. Это приводит к гораздо меньшему времени, затрачиваемому на сканирование таблиц в запросах, а время, затрачиваемое на создание индексов, имеет очень низкое влияние (1-2 минуты).

Это плохая практика?

Примечание. Мы не можем разбивать таблицы прямо сейчас.

6 голосов | спросил mordack550 20 Jam1000000amTue, 20 Jan 2015 11:25:19 +030015 2015, 11:25:19

4 ответа


9

Если это сработает для вас, тогда это хорошая практика. В основном нет жестких правил для баз данных.

ответил mrdenny 20 Jam1000000amTue, 20 Jan 2015 11:29:08 +030015 2015, 11:29:08
7

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

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

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

ответил ConcernedOfTunbridgeWells 20 Jpm1000000pmTue, 20 Jan 2015 19:32:38 +030015 2015, 19:32:38
2

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

Но если для изменения данных при создании индексов нет прецедента, это быстрый и жизнеспособный подход. Вы экономите время и пространство.

ответил Falco 20 Jpm1000000pmTue, 20 Jan 2015 18:35:04 +030015 2015, 18:35:04
1

Это совершенно правильная практика, хотя она чаще используется для вставок, чем обновлений. Это обсуждается в другом месте на Stack Exchange (например, https://softwareengineering.stackexchange.com/a/78598/25946). Однако стоит подтвердить, что все время, требуемое для «создания индекса, обновления, индекса drop», действительно меньше, чем обновление без индексов.

Вы также должны рассмотреть возможность оставить индекс на месте; очевидно, это будет даже быстрее, чем «создавать, обновлять, удалять». Сохранение индекса на месте замедляет вставки и удаляет немного, но может помочь с запросами. Вы также можете изменить индекс, который вы используете в настоящее время для ETL, только чтобы быть полезным для запросов. Если вы можете предоставить более подробную информацию о своей таблице и запросах, мы можем предложить более конкретные предложения.

ответил Jon of All Trades 20 Jpm1000000pmTue, 20 Jan 2015 19:37:13 +030015 2015, 19:37:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132