Я попытаюсь объяснить свою проблему, поскольку я не использую SQL напрямую.Улучшение производительности SELECT и UPDATE
Я использую инструмент INFORMATICA с помощью сопоставлений, обрабатывающих SQL-данные, поэтому я попытаюсь объяснить логику, которую делает моя карта в SQL.
Моя карта основном выбрать данные из ВСС (медленно изменяющееся измерение), где start_date = SYSDATE и Ind = 1 (эта таблица имеет примерно 600mil записи), используя этот запрос:
SELECT table.ACCOUNT_NUMBER, table.SUB_ACCOUNT_NUMBER, table.SUB_ACCOUNT_KEY
FROM table
WHERE table.CURR_IND=1
AND table.START_DATE=trunc(sysdate)
Эта таблица индексов, как следующие :
SUB_ACCOUNT_KEY - UNIQUE
Затем добавьте еще один столбец и обновите другую таблицу, имеющую приблизительно 8 мил записей. Запрос о том, что, вероятно, обновить с соединит
SET table2.ind =The_New_Column,table_2.sub_account_key = table1.sub_account_key
WHERE Table.account_number = Table_2.account_number
AND table.sub_account_number = table_2.sub_account_number
Этого table_2 являются индексами следующим образом:
(ACCOUNT_NUMBER, SUB_ACCOUNT_NUMBER) - UNIQUE
Как выбрать и обновить занять некоторое время, чтобы обработать в зависимости от объема данных, я получаю каждый день (У нас есть 1 день каждые три месяца, что количество данных составляет около X30 обычного дня, который берется навсегда .. около 2 часов)
Итак, мой вопрос: как я могу ускорить этот процесс, имея следующие ограничение:
я не могу (если не дают очень хороший повод), добавив индекс по таблицам, так как он используется во многих других процессах, так что это может повредить их выступления
Если вы не можете создавать индексы или разбивать таблицы на свои запросы, это кажется очень сложной задачей. Вы должны заметить, что индекс в таблице, из которой вы запрашиваете, бесполезен, так как вы не используете столбец в качестве фильтра. Индексы на таблице2 должны ускорить ваше обновление, но при попытке обработать тома, о которых вы говорите, это ваш лучший выбор. –
Я с @Yaron здесь - в большинстве случаев вещи с изменяющимися измерениями по своей природе ** сообщают ** базам данных, и вы хотите, чтобы столько индексов, сколько позволяет пространство для хранения. Индексы только «повреждают» производительность, когда у вас много обновлений или вставок в данные (поэтому их иногда отключают для перестроек анализа), которые, как правило, происходят в повседневных транзакционных базах данных.Даже тогда это баланс между результирующей «ограниченной» скоростью обновлений (может быть, меньше, чем вы думаете), и полезностью таблицы. –