Ситуация с sqlite 3.8.х прояснилась,
http://www.mail-archive.com/sqlite-users@sqlite.org/msg87754.htmlвозьмем такой запрос
SELECT
СН1.ID [ID1 $Справочник.Номенклатура],
СН2.ID [ID2 $Справочник.Номенклатура],
СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON СН2.ID=СН3.ID
3.7 использует сырое сканирование по СН1, и индексы СН1.ID и СН2.ID при join`ах. Результат <100мс
3.8 не хочет понимать СН2.ID=СН3.ID т.е. использует только индексы из первой таблицы СН1 Результат >8000мс
Проверяем это так
SELECT
СН1.ID [ID1 $Справочник.Номенклатура],
СН2.ID [ID2 $Справочник.Номенклатура],
СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON СН1.ID=СН3.ID
ЧТД на 3.8 Результат <100мс
Другой вариант - подсказать планировщику sqlite использовать индекс СН2.ID установкой перед ним плюсика.
SELECT
СН1.ID [ID1 $Справочник.Номенклатура],
СН2.ID [ID2 $Справочник.Номенклатура],
СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON +СН2.ID=СН3.ID
на 3.8 Результат <100мс
Итог такой: если не переделают планировщик использовать 3.8.х будет затруднительно, т.к. придется переписывать почти все запросы.