2

我有一个按字段“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 不使用索引。

4

2 回答 2

3

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

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

如果不查看查询并了解数据的某些特征(至少输入表的记录数和查询结果的预期大小),就很难说出最佳方法。

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

于 2012-05-23T13:07:13.170 回答
0

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

于 2012-05-21T21:35:52.010 回答