В этом случае требуется InnoDB или MyISAM? - PullRequest
4 голосов
/ 28 июля 2010

Я выполняю поиск по таблице (несколько внутренних объединений), выполнение которой занимает не более 5 секунд (7,5 миллиона строк).Это таблица MyISAM, и я не использую полнотекстовое индексирование по ней, так как я обнаружил, что при использовании MATCH AGAINST и обычной инструкции «как» в этом случае нет разницы в скорости из того, что я вижу.

Теперь я "страдаю" от заблокированных таблиц и запросов, выполняемых в течение нескольких минут, прежде чем они завершатся из-за этого.

Будет ли мне вообще полезно пытаться переключить движок на InnoDB?Или это помогает, только если мне нужно вставить или обновить строки ... а не просто выбрать их?Вся эта штуковина, запирающая столы, занята перемалыванием моих шаров ...

Ответы [ 2 ]

1 голос
/ 28 июля 2010

InnoDB поддерживает блокировку на уровне строки вместо блокировки на уровне таблицы ... так что это должно облегчить вашу проблему (хотя я не уверен, что она полностью ее устранит).

Лучше всего было быиспользуйте специальную поисковую систему (например, Sphinx, Lucene или Solr)

0 голосов
/ 28 июля 2010

Разница между блокировкой на уровне строки и на уровне таблицы важна только для запросов на вставку и обновление. Если вы в основном делаете выбор (поэтому вставки / обновления не случаются слишком часто для блокировки таблицы), разница будет не такой уж большой (даже если в недавних тестах InnoDB, кажется, превосходит MyISAM).

Другие способы, о которых вы могли бы подумать, - это реорганизовать структуру данных, возможно, добавив дополнительную справочную таблицу с тегами или ключевыми словами. Реализация более эффективного полнотекстового движка, как предложено webdestroya.

И последнее, но не менее важное: я также удивлен, что вы получили схожие результаты с FULL TEXT vs LIKE. Это может произойти, если поля, которые вы ищете, не очень широки, и в этом случае может быть достаточно стандартного индекса B-TREE с = search?

...