sql - 创建索引会加速 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
;
解决方案
您可以使用 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 日志索引。
推荐阅读
- python - 基于正则表达式连接嵌套字典值
- workflow - 如何在 didag 工作流程中捕获错误时应用 try catch
- python - 不支持的操作数 +
- stripe-payments - 支付宝支付失败,提示“无法识别订单数据...”
- sql - 获取 SQL 列的值并将其用作列名
- apache-kafka - 如何在ksql流中将列分配为KEY
- spartacus-storefront - cx-page-slot 显示在错误的媒体断点中
- azure - 为什么使用的是用户帐户而不是服务主体?
- batch-file - 用于循环文件夹并复制然后重命名的批处理文件
- html - 如何使 flexbox 容器水平滚动