Производительность текстового поиска HSQLDB

У меня низкая производительность при выполнении простого поиска (~20-30 с):

select Text from Library where REGEXP_MATCHES(Text, '.*abc.*')
select Text from Library where Text LIKE '%abc%'

Вот описание моей таблицы:

  • ВЫБРАТЬ счетчик (*) из библиотеки = 1 628 062
  • ВЫБЕРИТЕ AVG(ДЛИНА (текст)) из библиотеки = 766 символов
  • Файл Library.script составляет 2,5 ГБ.
  • Текстовое поле индексируется
  • Я уже сделал ОТКЛЮЧИТЕЛЬНЫЙ КОМПАКТ;
  • Библиотека - это таблица "в памяти"

Что-то, что не может быть нормальным:

  • У меня нет файла Library.data или.data для этой БД

У меня заканчиваются идеи о том, что нужно сделать, чтобы сделать такой запрос быстрее.

Любое предложение?

1 ответ

Решение

Напишите запрос в его простейшей форме.

select text from library where position('abc' in text) > 0

Я проверил, и это займет около секунды на 1,5 миллиона строк (но короче средней длины). Это должно занять меньше, чем те, которые вы пытались.

Другие вопросы по тегам