SAS временные таблицы DB2 - создание индекса

Я не нашел четкого ответа от моих администраторов по этому вопросу. Я на складе DB2... огромные столы. Я часто практикую временные таблицы с rsubmit, такие как...

execute (declare global temporary table session.tmp1(task char(9))on commit preserve rows not logged) by db2;
execute (create unique index session.indexa on session.tmp1(task)) by db2;
insert into session.tmp1 select * from connection to db2 
(
select   distinct a.column
from     table1 a
where    ...
for fetch only with ur
);

Тогда, когда мне понадобится эта конкретная группа значений, я присоединюсь к ней...

from session.tmp1 t
inner join tablex x on t.task = x.task

Вы заметите, что я объявил индекс (уникальный индекс даже). Мой вопрос... если индекс не существует в исходной таблице db2, которую я использую для создания временной таблицы... будет ли мой созданный индекс вообще иметь значение? Кроме того, старший аналитик посоветовал мне, что если я "упорядочу" атрибут / столбец, который я индексирую, когда создаю временную таблицу, это значительно ускорит объединение, когда я использую его для дополнительных таблиц. Кто-нибудь может подтвердить любой из этих вопросов? Может показаться банальным... но я действительно ищу несколько советов по скорости, особенно когда столы, которые я бью, очень большие...

1 ответ

Решение

Старший аналитик "Сортировать по" замечание:

Это зависит от сценария:

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

Если в объединении данные упорядочиваются до объединения, добавление порядка может увеличить скорость этого шага (план все равно будет отображать порядок данных, поскольку он не знает, что данные упорядочены), но выигранное время будет скорее всего будет максимально равно времени, которое вы потеряли при заказе таблицы tmp. Поэтому, когда вы используете свою таблицу tmp более одного раза, это может сэкономить вам время. Используйте это только один раз, и это довольно бесполезно.

Индекс, который вы создали:

Индекс поможет с последующими объединениями / условиями в таблице tmp. Так что, если вы используете индексированные столбцы в соединении или где: пойти на это.

Единственное исключение: иногда, когда вы объединяете все данные в таблице, индекс не выгоден. Это может быть проигнорировано (см. План снова), или это может даже замедлить вас при использовании. Это сильно зависит от СУБД: Oracle: полное сканирование таблицы в большинстве случаев происходит быстрее при объединении всех строк, MySQL/MariaDB: даже при полном объединении добавление индекса экономит ваши часы, SQL Server сам по себе определяет его довольно хорошо (обычно использует индекс), DB2: пожалуйста, опубликуйте здесь, как только вы определили это.

Другие вопросы по тегам