创建索引会加快SAS中的查询速度

时间:2018-12-05 20:45:10

标签: sql indexing sas

我以前从未创建过索引,但是我认为这可能会有所帮助。我有一个大约SAS数据集。 700万条记录。它是员工条目及其各自时间戳的列表。我要确定同一用户在同一天是否有任何后续条目,然后注意时间戳。 数据集(条目)为3列:Storage_ID,User_ID和EventTimestamp。 我想也许在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 :(得分:1)

您可以使用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日志索引。