Нормально работающая с виртуальными таблицами и их индексами в 1С версии 3.8.х - 1.0.2.6/3.8.11.1 наконец испеклась!
Изменения:
bf01. 1sqlite - исправлен баг с типизацией неопределенных перечислений (уже было в 3.7.17.bf3-bf4);
2. 1sqlite - изменен возврат информации об индексах из 1sqlite в sqlite, из-за изменений оптимизатора запросов в 3.8.х:
- 3.8.11 запрашивает индекс по сортировке, но без наложения условий, оригинальный планировщик выдает log(КолВоСтрок), измененный просто КолВоСтрок;
- при не подании в индекс возвращалось 10000-log(КолВоСтрок), сейчас просто КолВоСтрок
- при попадании в индекс возвращалось log(КолВоСтрок)*f(вхождения в индекс), сейчас просто log(КолВоСтрок)
При таких условиях планировщик работает достаточно предсказуемо.
Тест идиотского, но нужного запроса обновлен
http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/789#789bf1 sqlite - регистронезависимые поля в запросе.
bf2 sqlite - фикс вылета при запросе к базам sqlite (которые не :memory:), появившийся после bf1 (не учел некоторые оптимизации в коде sqlite). фикс определения типа данных в таблицах.
bf3 1sqlite - фикс SQLiteDataProvider для ТабличногоПоля. ТекущаяСтрока в табличном поле теперь работает на чтение/запись.
bf5 sqlite - фикс патча регистронезависимости like
P.S. Баги по IN (пока?) не провяляются. В отличие от 3.7.17, индекс по IN работает.
P.P.S. Изменения планировщика еще в процесс продумывания...
Классический пример: регистр продажи и 2 условия номенклатура и склад. По обоим есть индекс. Стоимость индекса по методике Орефкова одинакова, преимущество получает первый в списке WHERE. Есть и плюсы и минусы в таком решении.
Можно же и потелапатировать - взять 20% от справочника, по аналогии с АБС-анализом считаем что 80% мусор, поделить продажи на эти 20% и взять с них логарифм (или еще какой то бред вычисления). Нужно ли вообще предсказываение от зависимых таблиц, или это все от лукавого? Будет менее зависимо от расположения строк, но зато расположением строк поиграть не удасться.
Компромисc - сделать переменную ВерсияПланировщика. Что думаете?