首页 > 解决方案 > 创建索引会加速 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
;

标签: sqlindexingsas

解决方案


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


推荐阅读