Ёоооо! Я тащусь от OLE DB! Огромное уважение spock'у за идею и реализацию прикручивания этого к 1С!
Загнал 100000 элементов в справочник "Товары". Раньше поиск элемента по начальной подстроке выполнялся 70 миллисекунд. Теперь на таком запросе
|SELECT TOP 1
| Товары.Descr AS Наименование,
| UPPER(Товары.Descr) AS Индекс
|FROM
| $Справочник.Товары AS Товары
|WHERE
| Товары.Descr LIKE 'Тестовый%'
|ORDER BY Товары.Descr
Время поиска стало равным 870 миллисекунд.
А на таком
|SELECT TOP 1
| Товары.Descr AS Наименование,
| UPPER(Товары.Descr) AS Индекс
|FROM
| $Справочник.Товары AS Товары
|WHERE
| UPPER(Товары.Descr) LIKE 'ТЕСТОВЫЙ%'
|ORDER BY Индекс -- почему-то не хочет просто ORDER BY UPPER(Товары.Descr)
Время осталось равным 70 миллисекунд!!!
Результаты абсолютно понятны. Ведь у 1С стоит индекс по UPPER(Descr). Поэтому первый запрос приводит к полному перебору справочнику, что медленно, а второй работает с использованием индексов
Остается только порадоваться, что провайдер OLE DB такой умный и хитрый
Так вот, насколько я понял из исходников, VFP-провайдер использует именно первый вариант запроса, что и приводит к тормозам (и заодно приводит к регистрозависимому поиску).
artbearТестовый пример еще нужен? У меня тут специфичная конфа, чтобы не нужно было ее еще скачивать, понадобится переписать для типовой ТиС. Но, в принципе, могу - ничего сложного.