Я работаю над аналитическим приложением, которое работает с наборами данных до 10 000 000 записей. Я пишу в эту базу данных только при первоначальном импорте, а не после. Прямо сейчас этот набор данных хранится в SQLite - в основном по соображениям скорости.
К сожалению, я нахожу скорость разочаровывающей, в основном потому, что SQLite не может использовать запросы индексов, такие как
SELECT * FROM tbl WHERE time > 0.1 AND time < 1.1
Он будет использовать индекс только для первого выражения (время> 0,1) и будет выполнять полное сканирование таблицы для второго выражения (время <1,1). Типичная операция потребует только до 100 строк, но в среднем я читаю половину базы данных. </p>
Есть ли хитрость для использования индексов "двойного диапазона" в SQLite?
примечание: переход на другую СУБД является приемлемым решением, если он по крайней мере такой же быстрый, встроенный и поддерживает .NET.
обновление
Я был неправ, индексы фактически используются, если они «сэндвич» с диапазоном данных. К сожалению, используется только один из этих индексов, поэтому следующий запрос не будет оптимизирован:
SELECT *
FROM tbl
WHERE minTime > 0.1 AND minTime < 1.1 AND maxTime > 1.1 AND maxTime < 2.1