Скорость поиска в InnoDB

kezman
Дата: 04.02.2013 22:04:03
Всем привет!

У меня есть набор таблиц InnoDB, связанных между собой.
Есть таблица
texts
, где есть поле
content LONGBLOB
.
В таблице 150 000 строк.
Будет больше (500 000 или даже 1 000 000).

Мне нужна хорошая (3-5 сек) скорость ответа на запрос:
SELECT * FROM texts WHERE content LIKE '%тут любой мой текст%';


Сейчас при InnoDB это выливается в 25 - 100 секунд на ответ.
Я попробовал сменить Engine у этой таблицы на MyISAM и скорость стала 2 секунды.
Но мне нужны InnoDB для внешних ключей.

Подскажите, пожалуйста, что можно сделать со скоростью поиска в InnoDB?
Индекса у столбца нет, т.к. запросы SELECT всегда будут начинаться с %.
Какие настройки InnoDB можно посмотреть?
В данном случае единственное решение - зеркало этой таблицы в MyISAM движке + триггеры на CRUD для первой таблицы с логикой копирования данных в зеркало?
Кеширование приемлимо.
Повесить скрипт на cron и выполнять 1 раз в час, а затем кешированные результаты выдавать?
Какой вариант будет лучшим?
Akina
Дата: 04.02.2013 23:04:02
ctapnep
Дата: 04.02.2013 23:14:50
народ пишет, что не смотря на то, что по идее индекс никак использоваться не может, но почему-то он очень сильно таки ускоряет поиск. Так что может стоить попробовать все-таки добавить индекс.
А по уму при таких запросах надо делать FULLTEXT индекс и работать по нему. Только вот не уверен или он с LONGBLOB работает. Надо-бы LONGTEXT вместо него.
kezman
Дата: 04.02.2013 23:28:47
Akina
http://habrahabr.ru/post/114572/

Ну вот я оттуда и взял идею с зеркалом.
ctapnep
Дата: 04.02.2013 23:31:23
Akina
http://habrahabr.ru/post/114572/
Начиная с 5.6.4 FULLTEXT есть на InnoDB родной. Так что костыли не нужны.
P.S. Сфинкс и подобные - это не костыли. Это расширенные возможности.
miksoft
Дата: 04.02.2013 23:33:13
kezman
Сейчас при InnoDB это выливается в 25 - 100 секунд на ответ.
Я попробовал сменить Engine у этой таблицы на MyISAM и скорость стала 2 секунды.
Странно, не должно быть такой резкой разницы. До 2 раз - я бы еще понял, но десятки - слишком много, имхо.
Какие у вас размеры буферов (кэша индексов) для обоих движков?
kezman
Дата: 04.02.2013 23:36:04
ctapnep
народ пишет, что не смотря на то, что по идее индекс никак использоваться не может, но почему-то он очень сильно таки ускоряет поиск. Так что может стоить попробовать все-таки добавить индекс.
А по уму при таких запросах надо делать FULLTEXT индекс и работать по нему. Только вот не уверен или он с LONGBLOB работает. Надо-бы LONGTEXT вместо него.

Действительно LONGTEXT это необходимое условие для FULLTEXT, но есть и еще одно:

The used table type doesn't support FULLTEXT indexes


InnoDB не поддерживает FULLTEXT индексы.
ctapnep
Дата: 05.02.2013 02:44:13
kezman
InnoDB не поддерживает FULLTEXT индексы.
Какая версиа мускула?
kezman
Дата: 05.02.2013 10:02:11
ctapnep
kezman
InnoDB не поддерживает FULLTEXT индексы.
Какая версиа мускула?

SELECT VERSION();

5.5.28
ctapnep
Дата: 05.02.2013 21:10:03
И какая часть предложения
Начиная с 5.6.4 FULLTEXT есть на InnoDB родной.
вызывает затруднения? :)