2012-05-21 2 views
2

У меня есть большой набор данных SAS, отсортированный по полю 'A'. Я хотел бы сделать запрос, который ссылается на поля «A» и «B». Чтобы ускорить работу, я создал индекс на «B». Это приводит к бесполезному сообщению:Почему SAS не использовал мой индекс?

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 не использует индекс.

+0

Сколько наблюдений находится в таблице, и какова мощность в индексированном столбце? –

ответ

0

Невозможно ответить на такой вопрос, не видя запрос, который вы пытаетесь запустить. Индекс будет полезен только в том случае, если оптимизатор SAS определит, что он улучшит производительность. Можете ли вы показать простой пример кода, который вы хотите запустить?

3

В случае, если запрос не является достаточно избирательным - взятие большинства исходных записей в результат, использование индекса может не помочь производительности, в конечном итоге может ухудшить ситуацию. Вероятно, поэтому оптимизатор не использовал индекс.

Чтобы принудительно использовать индекс, попробуйте использовать параметр набора данных IDXNAME (возможно, в обеих таблицах). См. http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000414058.htm.

Не видя запроса и не зная некоторых характеристик данных (по крайней мере, количества записей в таблицах ввода и ожидаемого размера результата запроса), сложно сказать оптимальный подход.

В любом случае, для обеспечения оптимальной производительности при соединении таблиц обе таблицы должны быть одинаковыми, и все ключи соединения должны быть частью индекса.

Смежные вопросы