Есть ли способ оптимизировать простой SQL запрос с большой базой данных - PullRequest
0 голосов
/ 30 апреля 2020

Я использую SQLITE с Unity3D для создания игры со словами. У меня есть большая база данных всех существующих слов (700 тыс. Слов), и я просто хочу проверить, существует ли слово в базе данных.

Вот мой запрос SELECT Word FROM Words WHERE Word = 'IA' COLLATE NOCASE Это займет примерно 0,3599885 se c выполнить Возможно ли уменьшить время запроса?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Убедитесь, что все слова хранятся в таблице в все строчные буквы (или все заглавные буквы для вопроса). Вы можете использовать CONSTRAINT, чтобы гарантировать это. Тогда вам не нужно использовать сопоставление, чтобы найти слова, и это сделает его быстрым.

Например:

create table words (
  word varchar(50)
);

insert into words (word) values ('chicago'); -- always lower case
insert into words (word) values ('ia');
insert into words (word) values ('london');

Затем создайте индекс для столбца:

create index ix1 on words (word);

Теперь вы можете быстро искать:

select word from words where word = lower('IA');

Примечание : Обратите внимание, что функция LOWER() применяется к "правой стороне" уравнения (Значение). Если вы примените его к столбцу, вы сделаете запрос медленным, поскольку не допустите использование индекса.

1 голос
/ 30 апреля 2020

ОК. Я только что обнаружил, что COLLATE NOCASE действительно медленный. Я просто использовал LOWER() Вместо этого запрос принимает 0,0009974 SE c сейчас

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