У меня есть таблица (2 миллиона строк) в Informix v11.10, реплицированная (более 50 узлов) среда
Базовая компоновка выглядит так:
ID (PK) (int)
Division (int)
company (int)
feature1 char (20)
feature2 int
...
feature 200 char (2)
Есть несколько проблем, которые яИмеется с текущим макетом: с этой записью связано 200 «функций», но, возможно, 5-10 из них в любой момент времени не имеют значения по умолчанию / null (различаются для каждой записи).
Обновление всех записейдля компании иногда означало бы обновление 100 тыс. строк, что затрудняет репликацию и не поддается простому управлению.
Поэтому я внес в таблицу следующие изменения:
ID (int)
ID_TYPE (ID, подразделение или компания)
Имя_функции
Значение_функции
И имел другую таблицу только с:
ID (int)
Деление (int)
Компания (int)
Так, скажем, для ID # 1 в таблице будет 10 строк, а в связанном делении может быть несколько записей, илюбой может иметь несколько.Запись идентификатора «переопределит» любую запись с тем же именем feature_name, которое соответствует разделению, а разделение переопределит любую компанию.
Я создал функцию, которая при передаче идентификатора и имени feature_name запрашивает ее на основе компании.затем выполняет запрос на разделение, а затем на основе идентификатора и возвращает значение функции на основе вышеуказанной логики переопределения.(В основном это упорядоченный цикл foreach)
Затем я создал вид, похожий на:
выберите
my_func (feature1, ID) как feature1
my_func (feature2, ID) в качестве feature2
...
my_func (feature200, ID) как feature200
из таблицы
Теперь проблема в том, что я нажимаю на таблицу 200 * 3 (для ID, компании, подразделения) раз для каждогофункция, которая просто не собирается работать, это привязывает процессор.Новое число записей составляет около 20 миллионов и занимает гораздо меньше места.
Есть мысли?Мне кажется, что я где-то пропускаю временную таблицу, которая помешала бы ей попадать в таблицу с 20 миллионами строк 600 раз.