SQL как запрос в столбце varchar в H2, не использующий индекс - PullRequest
0 голосов
/ 06 марта 2019

В нашем приложении, использующем базу данных H2 (версия 1.4.196), мы выполняем поиск по полю varchar, выполняя поиск «содержит» (column like '%searchterm%) или «начинается с» (column like 'searchterm%).

Таблица довольно большая (около 400 000 записей), и поиск оказывается медленным (варьируется от 3 секунд на моем локальном компьютере разработки до 6-12 секунд на машинах наших клиентов).

Я обнаружил, что указанный столбец не был проиндексирован, и добавил индекс. Оказалось, что время поиска не улучшилось, даже когда я явно указывал подсказку индекса в запросе. explain показал мне, что в обоих случаях индекс не использовался.

Из моего опыта работы с другими системами баз данных (например, MSSQL) я знаю, что по крайней мере для запросов «начинается с» индексы можно использовать для улучшения поисковых операций.

Поскольку я не нашел соответствующей документации для базы данных H2, мой вопрос:

Можно ли использовать индексы в like запросах во H2?

1 Ответ

0 голосов
/ 06 марта 2019

Большинство систем БД будут использовать индекс, если у вас есть запрос LIKE ... но только до первого% в нем. В значительной степени не существует системы БД, в которой простое действие по созданию индекса для столбца могло бы повлиять на скорость, скажем: SELECT * FROM my_table WHERE my_column LIKE '%findme%';.

Вероятно, вы ищете индекс, специально разработанный для помощи в поиске. Например, система tsquery , которую имеет postgres (см. документация postgres tsquery ).

Еще один способ - добавить в программное обеспечение зависимость, которая это делает. Очевидный выбор - Apache Lucene .

H2 имеет некоторую поддержку для этого. Пожалуйста, обратитесь к H2 документации по полнотекстовому поиску .

...