Показать сообщение отдельно
Старый 01.06.2009, 10:22   #16  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
...
Алгоритм, примерно, следующий:
  1. Выбирается список индексов, первое поле которых есть в предложении WHERE. Если такой индекс один, то подставляется он в INDEX HINT, если таких индексов несколько - переходим к пункту 2
  2. Для каждого следующего поля выбранных индексов проверяется, входит ли оно в WHERE. Этот пункт повторяется до тех пор, пока не останется один индекс или не закончится список полей в выбранных индексах. Если остался один индекс, то используется он, если несколько, то отправляется запрос без хинта (пусть сервер сам разбирается)
Для KR наличие order by влияет на хинты, но я не уловил закономерность.
Что заметил - соответствие полей в ORDER BY какому-либо индексу и наличие этих полей в предложении WHERE в некоторых случаях отключает хинты.

PS Я пишу KR, но проверял только на KR2 (dax 3.0 sp5 kr2). Предположение, что это правильно для всех KR - надо проверять
Без KR проверял на Axapta 3.0 sp3 cu1
Такой вопросик... А от БД не зависит поведение? Я имею ввиду на Оракле аха или на SQL.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем