sas9.3索引数据集的奇怪行为

sas9.3索引数据集的奇怪行为,sas,Sas,我正在SAS 9.3中编写以下查询: CREATE TABLE XYZ AS select count(distinct x) from sasdata.dsn (keep=x); sasdata.dsn以变量x和y作为复合索引进行索引 奇怪的是,执行时的查询在sastmp中创建索引的临时文件,如图所示 这有什么原因吗。此外,性能非常差,因此您对如何快速获得复合指数中涉及的变量的不同计数有何建议 请你提供一个最小的可重复的例子好吗?另外,x和y在复合索引中的位置是什么?当您向sql中添加反

我正在SAS 9.3中编写以下查询:

CREATE TABLE XYZ AS
select count(distinct x) 
from sasdata.dsn (keep=x); 
sasdata.dsn
以变量
x
y
作为复合索引进行索引

奇怪的是,执行时的查询在sastmp中创建索引的临时文件,如图所示


这有什么原因吗。此外,性能非常差,因此您对如何快速获得复合指数中涉及的变量的不同计数有何建议

请你提供一个最小的可重复的例子好吗?另外,x和y在复合索引中的位置是什么?当您向sql中添加
反馈时,它会说些什么?再仔细考虑一下,我不确定您将从
选择计数(不同)
中的索引中获得什么样的真正性能提升。如果您的索引是一个好的索引[即,
x
是一个有区别的变量,因此有很多值],那么不同的查询将不得不查看几乎相同的值……除此之外,您在
xy
上有一个复合索引,这与
x
上的索引与
y
上的索引组合不同。我真的不确定SAS/SQL是否会陷入兔子洞——它不应该使用索引(我甚至不知道它为什么会这样做;当我做一个简短的测试时,它没有为此目的进行索引扫描。)我只是做了一个测试,而原始索引似乎被完全忽略了。我猜想你应该考虑另一种方式来做这件事。您可以尝试使用交叉标记,看看是否有SQL专家知道如何改进这一点;但到目前为止,我认为问题是SAS不会使用您的索引(而且可能不应该),就我所知,这是无法避免的。有一些非SQL方法可以解决此问题,特别是使用数据步骤和哈希表来构造计数,但哪种方法有意义(或者如果有任何方法可以节省时间)在很大程度上取决于您的数据和环境。请提供一个最小的可复制示例?另外,x和y在复合索引中的位置是什么?当您向sql中添加
反馈时,它会说些什么?再仔细考虑一下,我不确定您将从
选择计数(不同)
中的索引中获得什么样的真正性能提升。如果您的索引是一个好的索引[即,
x
是一个有区别的变量,因此有很多值],那么不同的查询将不得不查看几乎相同的值……除此之外,您在
xy
上有一个复合索引,这与
x
上的索引与
y
上的索引组合不同。我真的不确定SAS/SQL是否会陷入兔子洞——它不应该使用索引(我甚至不知道它为什么会这样做;当我做一个简短的测试时,它没有为此目的进行索引扫描。)我只是做了一个测试,而原始索引似乎被完全忽略了。我猜想你应该考虑另一种方式来做这件事。您可以尝试使用交叉标记,看看是否有SQL专家知道如何改进这一点;但到目前为止,我认为问题是SAS不会使用您的索引(而且可能不应该),就我所知,这是无法避免的。有一些非SQL方法可以解决此问题,特别是使用数据步骤和哈希表来构造计数,但哪种方法有意义(或者如果有任何方法可以节省时间)在很大程度上取决于您的数据和环境。请提供一个最小的可复制示例?另外,x和y在复合索引中的位置是什么?当您向sql中添加
反馈时,它会说些什么?再仔细考虑一下,我不确定您将从
选择计数(不同)
中的索引中获得什么样的真正性能提升。如果您的索引是一个好的索引[即,
x
是一个有区别的变量,因此有很多值],那么不同的查询将不得不查看几乎相同的值……除此之外,您在
xy
上有一个复合索引,这与
x
上的索引与
y
上的索引组合不同。我真的不确定SAS/SQL是否会陷入兔子洞——它不应该使用索引(我甚至不知道它为什么会这样做;当我做一个简短的测试时,它没有为此目的进行索引扫描。)我只是做了一个测试,而原始索引似乎被完全忽略了。我猜想你应该考虑另一种方式来做这件事。您可以尝试使用交叉标记,看看是否有SQL专家知道如何改进这一点;但到目前为止,我认为问题是SAS不会使用您的索引(而且可能不应该),就我所知,这是无法避免的。有一些非SQL方法可以解决此问题,特别是使用数据步骤和哈希表来构造计数,但这是否有意义(或者如果有任何方法可以节省时间)在很大程度上取决于您的数据和环境。
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21798912 Jun 19 03:18 sastmp-000000008.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21471232 Jun 19 03:18 sastmp-000000009.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21667840 Jun 19 03:19 sastmp-000000010.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21864448 Jun 19 03:20 sastmp-000000011.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21749760 Jun 19 03:21 sastmp-000000012.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21823488 Jun 19 03:22 sastmp-000000013.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21651456 Jun 19 03:23 sastmp-000000014.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21798912 Jun 19 03:25 sastmp-000000015.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21651456 Jun 19 03:27 sastmp-000000016.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21569536 Jun 19 03:29 sastmp-000000017.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21635072 Jun 19 03:31 sastmp-000000018.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21774336 Jun 19 03:33 sastmp-000000019.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21757952 Jun 19 03:36 sastmp-000000020.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21897216 Jun 19 03:38 sastmp-000000021.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21790720 Jun 19 03:41 sastmp-000000022.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21774336 Jun 19 03:44 sastmp-000000023.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21757952 Jun 19 03:48 sastmp-000000024.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21635072 Jun 19 03:51 sastmp-000000025.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21618688 Jun 19 03:55 sastmp-000000026.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21774336 Jun 19 03:58 sastmp-000000027.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21798912 Jun 19 04:02 sastmp-000000028.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21839872 Jun 19 04:06 sastmp-000000029.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21848064 Jun 19 04:11 sastmp-000000030.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21766144 Jun 19 04:15 sastmp-000000031.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21757952 Jun 19 04:20 sastmp-000000032.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21774336 Jun 19 04:25 sastmp-000000033.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21618688 Jun 19 04:30 sastmp-000000034.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21774336 Jun 19 04:35 sastmp-000000035.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21700608 Jun 19 04:40 sastmp-000000036.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21569536 Jun 19 04:46 sastmp-000000037.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21676032 Jun 19 04:51 sastmp-000000038.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 22077440 Jun 19 04:57 sastmp-000000039.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21839872 Jun 19 05:03 sastmp-000000040.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21725184 Jun 19 05:09 sastmp-000000041.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21577728 Jun 19 05:16 sastmp-000000042.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21749760 Jun 19 05:22 sastmp-000000043.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21643264 Jun 19 05:29 sastmp-000000044.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21258240 Jun 19 05:36 sastmp-000000045.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21594112 Jun 19 05:43 sastmp-000000046.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 22175744 Jun 19 05:50 sastmp-000000047.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21708800 Jun 19 05:58 sastmp-000000048.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21880832 Jun 19 06:05 sastmp-000000049.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 21700608 Jun 19 06:13 sastmp-000000050.sas7bndx.lck
-rw-rw-r-- 1 KROUSETLP UNIX_KROGER_DM 12836864 Jun 19 06:17 sastmp-000000051.sas7bndx.lck