Показать сообщение отдельно
Старый 09.10.2007, 11:05   #32  
Cheb is offline
Cheb
Участник
Лучший по профессии 2017
 
138 / 13 (1) ++
Регистрация: 22.09.2002
Адрес: Ростов-на-Дону -> Москва
Цитата:
Сообщение от golyshev Посмотреть сообщение
Кроме того, при выборках в коде по этой таблице, не будет неоднозначностей по поводу того, какой именно индекс будет использовать MSSQL (главное не забывать НЕ указывать SETCURRENTKEY).
Запускаю вот такой код с включенным Монитором Клиента.
[codebox]
TT := TIME;
GLEntry.RESET;
//GLEntry.SETCURRENTKEY("G/L Account No.");
GLEntry.SETRANGE("G/L Account No.",'20.70');
IF GLEntry.FIND('-') THEN;
MESSAGE('ok %1',TIME - TT);[/codebox]

Время выполнения запроса - 4407ms. В Мониторе вижу, что SQL Plan = Clustered Index Scan(Test$G_L Entry$0)[3,1], SQL Index = "Операция Но.".

Далее делаю так:
[codebox]
TT := TIME;
GLEntry.RESET;
GLEntry.SETCURRENTKEY("G/L Account No.");
GLEntry.SETRANGE("G/L Account No.",'20.70');
IF GLEntry.FIND('-') THEN;
MESSAGE('ok %1',TIME - TT);[/codebox]

Время выполнения - 47ms. SQL Plan = Bookmark Lookup[3,1];Index Seek($1)[4,3], SQL Index = "Фин. Счет Но., Дата Учета, Операция Но.".

Т.е., SETCURRENTKEY все-таки влияет на выбор ключа при выполнении запроса??? Или где я ошибся?

PS: 3.70B, SQL2000.