Как ускорить поиск sqlite по более чем 500 000 строк международных символов - PullRequest
2 голосов
/ 23 марта 2012

У меня есть таблица с именем search_terms со столбцом с именем term с типом TEXT. Существует также столбец с именем id и популярность. Термин содержит международные символы, а также символы ASCII. (Японский и английский)

Я пытаюсь быстро найти эту таблицу с помощью sqlite. К сожалению, поиск занимает более 5 секунд. Я ищу что-то похожее на:

SELECT id from search_terms where term LIKE 'ka%' order by popularity

Я понимаю, что оператор sqlite LIKE работает медленно, поскольку не использует индексы (облом). Кроме того, FTS не может помочь мне здесь, потому что я не ищу полных слов. Он начинается с первой буквы, и поиск может продолжаться (с использованием парадигмы поиска в реальном времени).

Другие вещи на заметку. Данные в базе данных являются статическими. Это не изменится. Я могу добавить таблицы, чтобы ускорить процесс, возможно, я просто хотел бы несколько предложений. Это происходит во встроенном устройстве, поэтому оно должно быть максимально быстрым. Предположим, пространство не является проблемой.

Ответы [ 3 ]

1 голос
/ 23 марта 2012

Согласно документации, SQLite использует индекс для LIKE .Но вам нужно создать индекс конечно.

1 голос
/ 09 мая 2012

SQLite FTS поддерживает поиск префиксов:

MATCH 'ka*'

вместо

LIKE 'ka%'

при условии, что таблица заменена на таблицу FTS.

1 голос
/ 23 марта 2012

Если возможно, используйте индексы.

create clustered index ix1 on TABLE (term)

или

create nonclustered index ix1 on TABLE (term)

Попробуйте.

Тиз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...