Я пытаюсь улучшить загрузку хранилища размерных данных. Мне нужно загружать десятки тысяч записей каждый раз, когда я запускаю операцию загрузки;иногда мне нужно загрузить сотни тысяч записей;каждые полгода мне нужно загружать миллионы записей.
Для операции загрузки я создаю запись в памяти, соответствующую записи таблицы фактов из 48 столбцов, которая должна обновляться или вставляться (в зависимости от того,предыдущая версия записи уже есть в таблице фактов). Запись в памяти включает в себя около 2 дюжин указателей внешних ключей на различные таблицы измерений. У меня есть индексы для всех этих внешних ключей таблицы фактов (и, конечно, я могу отключить эти индексы при загрузке хранилища данных).
После заполнения записи в памяти свежими данными для записи таблицы фактов я добавляю ее в таблицу фактов (обновить или вставить, как указано выше).
Мне интересно, смогу ли яулучшить производительность в ситуациях обновления, обновляя только те столбцы, которые были изменены, вместо того, чтобы бездумно обновлять каждый столбец в записи таблицы фактов. Выполнение этого добавило бы некоторые издержки в том, что моя программа загрузки стала бы более сложной. Но получу ли я какую-либо выгоду в любом случае? Предположим, например, что один из этих внешних ключей таблицы измерений не изменился. Будет ли повышение производительности, если я не обновлю этот конкретный столбец? Я предполагаю, что все сводится к тому, отслеживает ли SQL Server (подсчитывает ??) ссылки на внешние ключи между таблицами фактов и измерений. Если SQL Server действительно выполняет такое отслеживание, то, возможно, будет повышение производительности, если я не обновлю столбец, поскольку тогда SQL Server не потребуется выполнять свою внутреннюю операцию отслеживания. Но если SQL Server не выполняет такое отслеживание, я полагаю, что я должен просто обновить все столбцы таблицы фактов 48 независимо от того, изменились они или нет, так как это позволило бы избежать усложнения и накладных расходов в моей программе загрузки.
Буду признателен за любые комментарии или предложения.