kiruha писал(а) 15. Мая 2008 :: 08:58:Для -3
(STR($СпрНом.Вес,5,0) BETWEEN ' -3' AND ' -9' )
OR(STR($СпрНом.Вес,5,0) BETWEEN ' -10' AND ' -99' )
OR(STR($СпрНом.Вес,5,0) BETWEEN ' -100' AND ' -999' )
OR(STR($СпрНом.Вес,5,0) BETWEEN '-1000' AND ' -9999' )
Хм, сложно сделать универсально, да и боюсь, что SQLite опухнет от такой "оптимизации", если только спрятать это от него, и обрабатывать всю эту байду внутре себя.
kiruha писал(а) 15. Мая 2008 :: 08:58:Проблема в join была в производительности Join и group на больших объемах данных(например две
таблицы соединяются по полю не входящему в индекс) -
из за последовательного перебора время с ростом объема таблиц росло экспоненциально.
В Fox же использовалось предварительное индексирование.
Ну, этого там нет, и вряд ли будет. Если индекса по ведомой таблице нет по полю соединения, он будет для каждой строки ведущей таблицы перебирать все строки ведомой, то есть время будет пропорционально произведению количества строк ведущей и ведомой таблицы. Сейчас можно обойти так:
create temp table t1 as select from Таблица.НеИндексированноеПоле, Таблица.id
create index t1_ on t1(НеИндексированноеПоле)
select ... from ВедущаяТаблица
inner join t1 on ВедущаяТаблица.поле = t1.НеИндексированноеПоле
inner join Таблица on t1.id = Таблица.id
А в будущем я попробую это тоже спрятать от SQLite, и если он будет хотеть от меня выборку по неиндексируемому полю, создавать временный индекс на-лету.