Лучшая структура для реляционной базы данных со статьями и тегами - PullRequest
2 голосов
/ 05 сентября 2010

Получил довольно простую систему:

Таблица articles, таблица tags, таблица article_tags, содержащая идентификаторы тега и статьи, которой он присвоен.

Когда я хочу получить список всех своих статей и всех их тегов, я должен выполнить несколько GROUP_CONCAT() запросов, чтобы получить список тегов через запятую, который я могу разбить на части и отобразить.

Загрузка на больших страницах происходит медленнее, и я беспокоюсь, что это не лучший способ сделать это. Я недавно задал вопрос о получении всех статей с определенным тегом, и в итоге я решил найти решение с использованием двойного соединения. Этот запрос выполняется быстро, но для выполнения «общего» запроса (например, получение 10 последних статей вместе со всеми их тегами) требуется до 1 секунды.

Мои таблицы проиндексированы довольно хорошо, и другие запросы выполняются быстро. Есть ли лучший способ / шаблон проектирования для такой структуры SQL? Любые советы будут действительно полезны.

Спасибо, Matt

Ответы [ 3 ]

2 голосов
/ 05 сентября 2010

Структура таблицы правильная, лучше всего было бы проанализировать план выполнения запроса с использованием синтаксиса EXPLAIN и опубликовать его, если вам нужна помощь.

0 голосов
/ 05 сентября 2010

Может быть, вы можете удвоить систему, предварительно рассчитав group_concat в другом поле таблицы статьи и добавив в него индекс FULLTEXT.

Я не уверен в том, какие будут результаты, но этолегко попробовать.Простые запросы будут проходить через обычный процесс (который останется быстрее), а более сложные могут выполняться таким образом (который будет быстрее, чем объединения).

0 голосов
/ 05 сентября 2010

попытка вернуть все теги в group_concat почти наверняка является узким местом.

Есть ли проблема с возвратом всех строк в правильном порядке и повторением статей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...