Производительность текстового поиска 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 миллиона строк (но короче средней длины). Это должно занять меньше, чем те, которые вы пытались.