为什么SAS不使用我的索引?

时间:2012-05-21 17:10:06

标签: indexing sas proc-sql

我有一个按字段“A”排序的大型SAS数据集。我想做一个引用字段'A'和'B'的查询。为了加快性能,我在'B'上创建了一个索引。这导致了一条无用的消息:

INFO: Index B not used.  Sorting into index order may help.

当然,对B进行排序会有所帮助。但那不是重点。索引适用于已经在其他某个字段上排序的情况。

在类似的查询中,SAS给出了这样的信息:

INFO: Use of index C for WHERE clause optimization canceled.

有关让SAS使用我的索引的任何提示吗?在一种情况下,查询需要2个小时才能运行,因为SAS不使用索引。

2 个答案:

答案 0 :(得分:3)

如果查询没有足够的选择性 - 将大多数源记录带到结果中,索引的使用可能无助于性能,最终会使事情变得更糟。这可能是优化器决定不使用索引的原因。

强制使用索引尝试使用IDXNAME数据集选项(可能在两个表上)。 请参阅http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000414058.htm

在没有查看查询并了解数据的某些特征(至少记录输入表的数量和查询结果的预期大小)的情况下,很难说出最佳方法。

无论如何,为了获得最佳性能,在连接表时,两个表都需要类似地索引,并且所有连接键都必须是索引的一部分。

答案 1 :(得分:0)

如果没有看到您尝试运行的查询,则无法回答此类问题。只有SAS优化器确定它将提高性能时,索引才有用。你能展示一个你想要运行的代码的简单例子吗?