Как мне настроить эти таблицы для поиска? - PullRequest
0 голосов
/ 30 ноября 2011

Мой сайт PHP - это интернет-магазин с около 5 тыс. Товаров.Продукты принадлежат поставщику, категории и, возможно, подкатегории.У каждого из этих элементов есть имя, а у продуктов - описания.

Поисковые запросы, которые мы настроили, работают прекрасно, но, как правило, работают довольно медленно.Они варьируются от 0,20 до 30 секунд (да, 30 секунд).Мы оптимизировались как сумасшедшие, и я начинаю думать, что у нас нет места для улучшения в этом направлении, поэтому мы кешируем их, и это делает жизнь намного проще.

Но когда они бегут, онивсе еще убивают сервер, потому что, как представляется, все блокировки таблиц, которые идут с MyISAM.

Итак, мой вопрос: Есть ли способ использовать InnoDB (блокировка на уровне строк)) и все еще поддерживать FULLTEXT?Должны ли мы переместить нашу БД вне офиса и использовать такой сервис, как DB2?Есть ли какое-нибудь другое программное обеспечение типа поисковой системы, которое мы должны использовать вместо этого?

Любая помощь очень ценится:)

1 Ответ

1 голос
/ 30 ноября 2011

InnoDB теперь имеет полнотекстовое индексирование: http://blogs.innodb.com/wp/2011/07/innodb-full-text-search-tutorial/

, но, поскольку он в основном новый, большинство установок MySQL его пока не поддерживают.

Стандартный обходной путь - это иметь«зеркальная» таблица MyISAM, содержащая копии данных для поиска с полнотекстовым индексом.Затем вы присоединяете исходную таблицу InnoDB к копиям MyISAM с полнотекстовым поиском по полям myisam и обычными другими предложениями 'where' на копиях innodb.

При наличии соответствующих триггеров в таблице InnoDB нет причин, по которымКопии MyISAM могут быть устаревшими / неправильными, или вы можете просто перестроить их по расписанию, чтобы у вас было окно устаревания, соответствующее интервалу восстановления.

...