Может ли кто-нибудь объяснить мне, почему это настаивает на создании декартова продукта при объединении? Мне казалось бы логичным использовать index. Есть ли способ заставить его использовать индекс (вы можете видеть, что я пробовал, но он игнорирует мой оператор idxname
).
Приведенный ниже пример - это самый простой способ воспроизвести возникшую у меня проблему, и это не мой реальный код.
Создайте несколько тестовых данных:
data all_periods;
do date=mdy(1,1,2015) to mdy(4,1,2015);
do hour=0 to 23;
do minute=0 to 59;
period_start = dhms(date,hour,minute,0);
output;
end;
end;
end;
run;
Создайте индекс на тестовых данных:
proc sql noprint;
create index period_start on all_periods;
quit;
Выполните самостоятельное присоединение:
proc sql noprint _method;
create table concurrent as
select a.period_start,
count(*) as result
from all_periods a
join all_periods (idxname=period_start) b on b.period_start lt a.period_start
group by 1
;
quit;