Индекс для функции МЕЖДУ в SQLite - PullRequest
1 голос
/ 04 февраля 2010

Я работаю над аналитическим приложением, которое работает с наборами данных до 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 

Ответы [ 2 ]

0 голосов
/ 04 февраля 2010

Модуль R * Tree?

http://www.sqlite.org/rtree.html

0 голосов
/ 04 февраля 2010

Я не уверен, что это обязательно поможет вашей скорости, но вы рассматривали использование оператора «МЕЖДУ»? Скорее всего, optomizer будет добрее использовать индекс при его использовании.

SELECT * FROM tbl WHERE time BETWEEN 0.1 AND 1.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...