Directs SAS to use a specific index to match the conditions of
a WHERE expression.
Valid in: |
DATA step and PROC steps
|
Category: |
User Control of SAS Index Usage
|
Restriction: |
Use with input data sets only
|
Restriction: |
Mutually exclusive with IDXWHERE= data set
option
|
-
index-name
-
specifies the name (up to 32 characters)
of a simple or composite index for the SAS data set. SAS does not attempt
to determine whether the specified index is the best one or whether a sequential
search might be more resource efficient.
Interaction: |
The specification
is not a permanent attribute of the data set and is valid only for the current
use of the data set. |
Tip: |
To request that IDXNAME=
usage be noted in the SAS log, specify the system option MSGLEVEL=I. |
By default, to satisfy the conditions
of a WHERE expression for an indexed SAS data set, SAS identifies zero or
more candidate indexes that could be used to optimize the WHERE expression.
From the list of candidate indexes, SAS determines the one that provides the
best performance, or rejects all of the indexes if a sequential pass of the
data is expected to be more efficient.
Because the index SAS selects might not always provide
the best optimization, you can direct SAS to use one of the candidate indexes
by specifying the IDXNAME= data set option. If you specify an index that SAS
does not identify as a candidate index, then IDXNAME= does not process the
request. That is, IDXNAME= does not allow you to specify an index
that would produce incorrect results.
IDXWHERE= enables you to override the
SAS decision about whether to use an index.
This example uses the IDXNAME= data set option in order
to direct SAS to use a specific index to optimize the WHERE expression. SAS
then disregards the possibility that a sequential search of the data set might
be more resource efficient and does not attempt to determine whether the specified
index is the best one. (Note that the EMPNUM index was not created with the
NOMISS option.)
data mydata.empnew;
set mydata.employee (idxname=empnum);
where empnum < 2000;
run;
Copyright © 2011 by SAS Institute Inc., Cary, NC, USA. All rights reserved.