У меня вопрос, связанный с производительностью запросов Netezza
. У меня есть 2 таблицы. Таблица A и таблица B и таблица B - это поднабор таблицы A с изменением данных. Мне нужно обновить эти новые значения до таблица а из таблицы B Мы можем иметь 2 подхода здесьnetezza left external join query performance
1) Левый внешнее соединение и выберите соответствующие столбцы и вставить в целевой таблице
2) вставьте таблицу с данными в целевую таблицу и обновить эти значения из TableB с помощью join
Я пробовал и то и другое, и логически оба они одинаковы.But Explain plan is дает разную стоимость
для нормального выбора
а) Sub-query Scan table "TM2" (cost=0.1..1480374.0 rows=8 width=4864 conf=100)
обновления
б) Hash Join (cost=356.5..424.5 rows=2158 width=27308 conf=21)
для левого внешнего соединения
Sub-query Scan table "TM2" (cost=51.0..101474.8 rows=10000000 width=4864 conf=100)
От этого я чувствую левое внешнее соединение лучше. Можно ли поставить некоторые мысли об этом и руководство
Благодарности
Можете ли вы пояснить, что такое «целевой стол»? Из ваших первых нескольких утверждений, похоже, вы пытаетесь обновить некоторую таблицу A из некоторых значений таблицы B. Это так? Если это так, ваши две опции не эквивалентны. Вы говорите о чистой вставке в варианте 1 и вставке и обновлении (которое является как вставкой, так и удалением) в опции 2. Очевидно, что вариант 2 будет стоить дороже. –
Было бы также полезно понять приблизительное количество строк и столбцов распределения каждой таблицы. – ScottMcG
Привет всем, В обоих случаях нам нужно вставить в таблицу целей. В таблице первого случая левая внешняя таблица соединений b и вставка в таблицу c. Второй случай прямая вставка из таблицы a в таблицу c и обновление с помощью таблицы B. Упование теперь понятно. Если не считать строк, мы не можем нарисовать строку. Таблица B будет подмножеством таблицы A и макс no строк в худшем случае (10 миллионов), так как Insert содержит Group BY, а таблица фильтров C не будет пересекать 1 миллион данных. –