Почему SAS не использовал мой индекс?

У меня есть большой набор данных SAS, отсортированный по полю "A". Я хотел бы сделать запрос, который ссылается на поля "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 ответа

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

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

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

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

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

Другие вопросы по тегам