Мой каталог сайта в настоящее время использует структуру таблицы "toxi" для маркировки списков.
Моя таблица сообщений содержит около 5 миллионов записей, а таблица карт - около 15 миллионов записей.
Я использую термины для хранения всех видов информации, таких как автор, издатель, тема, среда (например, аудио, видео и т. Д.). И сообщение может иметь несколько терминов для каждой таксономии (несколько авторов, несколько тем и т. Д.).
Поиск сообщений на основе одного term_id занимает около четырех секунд, чтобы вернуть результаты, что довольно паршиво, но это займет 40 секунд, чтобы вернуть результаты, используя несколько терминов.
Мне нужно более эффективное решение, но я не могу понять, являются ли мои запросы неэффективными или структура моей таблицы.
== ОДИН СРОК ПОИСКА ==
SELECT * FROM posts
LEFT JOIN post_taxonomy_term_map ON (posts.ID = post_taxonomy_term_map.object_id)
WHERE post_taxonomy_term_map.term_id=$term1
== ПОИСК НЕСКОЛЬКИХ УСЛОВИЙ ПОИСКА ==
SELECT p.*
FROM post_taxonomy_term_map m, posts p
WHERE m.term_id IN ($term1, $term2, $term3)
AND p.ID = m.object_id
GROUP BY p.ID
HAVING COUNT( p.ID )=3
СТОЛЫ И КОЛОННЫ
записей {ID, post_title и т. Д ...}
ПЕРВИЧНЫЙ ИД
taxonomy_terms {term_id, term_label, term_slug и т. Д.}
ПЕРВИЧНЫЙ term_id
post_taxonomy_term_map {map_id, object_id, taxonomy, term_id}
PRIMARY map_id
INDEX object_id
ИНДЕКС term_id
ИНДЕКС таксономии
ПРИМЕЧАНИЕ: post_taxonomy_term_map.object_id относится к значению posts.ID