База данных SQLite занимает слишком много времени для извлечения (или извлечения некоторых данных) - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть база данных sqlite cipher с около 80000 записями (содержит 7 столбцов). В настоящее время на поиск записей уходит слишком много времени. Мне нужен оптимизированный способ поиска 1 или более записей на основе некоторых критериев (нужно что-то вроде индексации), чтобы я мог сократить время поиска. У кого-нибудь есть идеи о том, как действовать, чтобы достичь этого? Нужна срочная помощь. (

Редакция: Я использую API шифрования sqlite, потому что мне нужно хранить зашифрованные данные в базе данных sqlite. Я установил ключ прагмы, и используемое шифрование - AES - 256. Я также создал индекс для каждой таблицы в моей базе данных. Но мой поиск не быстрый. Это занимает слишком много времени. Нужно решить это как можно скорее.

2-е ВРЕМЯ Эй, ребята, я сильно застрял на этот раз. Я делаю поиск, как только пользователь нажимает на текстовое поле. Чтобы подвести итог проблемы, позвольте мне рассказать вам поток.

У меня есть 2 текстовых поля и таблица, содержащая ~ 80 тыс. Записей и 7 столбцов. Когда я набираю что-либо в поле field1, в таблице производится поиск содержимого поля field1. Допустим, я ввел «a» в поле field1, а затем запрос на выборку возвращает все записи, содержащие букву «a» в column1. Итак, таблица ищется, как только я набираю буквы. До сих пор проблем нет. Его возвращение записей без каких-либо задержек. Запрос:

SELECT DISTINCT <COL1> COLLATE NOCASE as <COL1> from <TABLE_NAME> where <COL1> like '%ab%'   LIMIT 0,501

Теперь, если я нажму на поле 2, то через 1 секунду я увижу курсор на поле 2, когда этот запрос будет выполнен:

SELECT DISTINCT <COL2> COLLATE NOCASE as <COL2> from <TABLE_NAME> where <COL1> like '%ab%'   LIMIT 0,501

Теперь процесс извлечения базы данных занимает время, если я что-то наберу в поле2. Вот последний запрос:

SELECT DISTINCT <COL2> COLLATE NOCASE as <COL2> from <TABLE_NAME> where <COL1> like '%ab%' AND <COL2> like '%cd%'  LIMIT 0,501

Когда я попытался проанализировать проблему, я узнал, что проблема связана с ключевым словом DISTINCT. Я создал индексы для столбцов следующим образом:

CREATE INDEX <name1> on <TABLE_NAME>(<COL1>)
CREATE INDEX <name2> on <TABLE_NAME>(<COL1> COLLATE CASE)
CREATE INDEX <name3> on <TABLE_NAME>(<COL2>)
CREATE INDEX <name4> on <TABLE_NAME>(<COL2> COLLATE CASE)

Любой знает, как сделать этот поиск быстрым.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Что-то вроде индексации? SQLite полностью способен использовать индексы , как описано здесь в документации. Структура и назначение ваших таблиц определят, как лучше их реализовать.

0 голосов
/ 28 февраля 2012

Я предполагаю, что вы используете источник объединения SQLite.Если вам также нужен полнотекстовый поиск, вы можете добавить это определение поверх sqlite3.c (или какие значения вам нужны для поиска?).

#define SQLITE_ENABLE_FTS3

Затем создайте индекс, используя docs VeryVito упомянуто.

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