Это дело требует InnoDB или MyISAM?
Я выполняю поиск по таблице (несколько внутренних соединений), который занимает максимум 5 секунд (7,5 миллиона строк). Это таблица MyISAM, и я не использую полнотекстовое индексирование на ней, поскольку я обнаружил, что нет никакой разницы в скорости при использовании MATCH AGAINST и нормального оператора "like" в этом случае от того, что я могу видеть.
Теперь я "страдаю" от заблокированных таблиц и запросов, выполняемых в течение нескольких минут, прежде чем они завершатся из-за этого.
Будет ли мне вообще полезно попытаться переключить двигатель к InnoDB? Или это помогает только в том случае, если мне нужно вставить или обновить строки... не просто выбрать их? Вся эта история с замком стола занята тем, что перемалывает мне яйца...
2 ответа:
Разница между блокировкой на уровне строк и на уровне таблиц важна только для запросов insert и update. Если вы в основном делаете выбор (поэтому вставки / обновления не происходят слишком часто, чтобы заблокировать таблицу), разница не будет такой уж большой (хотя в последних тестах InnoDB, кажется, превосходит MyISAM).
Другие способы, о которых вы могли бы подумать, - это реорганизация структуры данных, возможно, включая дополнительную таблицу поиска с "тегами" или "ключевыми словами". Внедрение более эффективный полнотекстовый движок, предложенный webdestroya.
И последнее, но не менее важное: я также удивлен, что вы получили аналогичные результаты с полным текстом vs LIKE. Это может произойти, если поля, которые вы ищете, не очень широки, и в этом случае, возможно, будет достаточно индекса B-дерева stndard с = search?