Будет ли создание индекса ускорить запрос в SAS - PullRequest
0 голосов
/ 05 декабря 2018

Я никогда раньше не создавал Индекс, но думаю, что это может помочь здесь.У меня есть набор данных SAS ок.7 миллионов записей.Это список записей сотрудников вместе с соответствующими временными метками.Я определяю, есть ли какие-либо последующие записи того же пользователя в тот же день, и затем отмечаю метку времени.Набор данных (Записи) состоит из 3 столбцов: Storage_ID, User_ID и EventTimestamp.Я думаю, что, возможно, Index на Stoarge_ID и User_ID помогут ускорить процесс.Если бы они помогли, как / где мне нужно было бы создать индекс?

PROC SQL;
CREATE TABLE sub_ENTRIES AS
SELECT A.*,
(SELECT
MIN(B.EVENTTIMESTAMP)

FROM 
ENTRIES B
WHERE 
A.STORAGE_ID=B.STORAGE_ID
AND A.USER_ID=B.USER_ID
AND DATEPART(A.EVENTTIMESTAMP)=DATEPART(B.EVENTTIMESTAMP)
AND B.EVENTTIMESTAMP > A.EVENTTIMESTAMP
) AS NEXT_ACCESS FORMAT=DATETIME27.6

FROM
ENTRIES A
;

1 Ответ

0 голосов
/ 06 декабря 2018

Вы можете создать составной индекс (два или более столбцов), используя SQL.

Например:

Proc SQL;
  create index STORAGE_USER on ENTRIES (storage_id, user_id);

Общий синтаксис для ключа индекса из n столбцов::

  create index <index-name>
  on <table-name>
   ( <column-name-1>,
     <column-name-2>,
     …
     <column-name-<n>>
   )

Индекс наиболее эффективен / применим, когда в критерии выбора или объединения запроса входят все столбцы составного ключа.Использование OPTION MSGLEVEL=I для использования индекса журнала SAS.

...