Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть 3 таблицы
book (id, name, ...) -primary на id и фуллтекст на name
author (id, name, ...) - primary на id и фуллтекст на name
book_to_author (book_id, author_id) - индекс на book_id и индекс на author_id
в таблицах book и author по 100к записей.
в таблице book_to_author 200к записей. То есть в среднем у одной книги по 2 автора и у одного автора по 2 книги.
Есть запрос, который ищет книги, названия или имена авторов которых удовлетворяют условию поиска
SELECT *
FROM book b
LEFT JOIN book_to_author b2a ON ( b.id = b2a.book_id )
LEFT JOIN author a ON ( b2a.author_id = a.id )
WHERE MATCH(b.name) AGAINST('Alexander Pushkin') OR MATCH(a.name) AGAINST('Alexander Pushkin')
LIMIT 0, 30
Запрос выполняется долго.
Есть ли какая то возможность ускорить его? Или это как раз тот случай, когда не стоит бежать от избыточности и можно продублировать поле author.name в таблицу book (а там и на оба поля составной фуллтекст индекс поставить) ?
Отредактированно jerry (03.04.2011 20:11:51)
Неактивен
По смыслу Вы хотите именно объединения; более того — если объединить в одну
табличку, то Вы получите более релевантные результаты в начале.
С текущим способом хранения данных будет неплохо работать UNION с отдельными
поисками по названию или по автору.
Неактивен
Страниц: 1