Использование поля вида idx_DATE_TIME_IDDOC_LINENO_ACTNO не решает проблему
При таком простом условии (сравнение по одному полю, входящему в индекс), будет очень хорошо:
двинет по индксу, отсчитает нужное количество записей.
При ключе с двумя полями входящими в один индекс, все гораздо хуже. Для MSSQL у Дмитро применяется сейчас такая конструкция:
where field1 > 'key1' or (field1 = 'key1' and field2 > 'key2')
MSSQL нормально понимает такую запись, двигает по индексу.
SQLite - во-первых выражения, объединенные по OR не оптимизирует, только по AND.
Во-вторых, с константами не работает (те он все равно не поймет, что в обоих подусловиях одинаковый 'key1')
Если переписать условие вот так:
where field1 >= 'key1' AND NOT (field1 = 'key1' AND field2 <='key2')
то SQLite для начала двинет по индексу на 'key1', потом будет идти по индексу, проверяя каждую запись на NOT (field1 = 'key1' AND field2 <='key2')
Это конечно несколько оптимальнее, но все равно не то, чего бы хотелось. А если еще и по первому полю селективность низкая, вообще хреново.
К сожалению, умение составлять английские предложения - не сильная моя черта, а то бы давно им фичереквест написал.