У меня есть таблицы NewsStories, которые я оставил соединить с некоторыми связанными таблицами. Каждая новость может иметь несколько изображений, категорий и адресов. Таким образом, запрос по существу:
SELECT * FROM NewStories
LEFT JOIN Images ON Newstories.id=Images.story_id
LEFT JOIN Categories ON NewsStories.id=Categories.story_id
LEFT JOIN Addresses ON NewsStories.id=Addresses.story_id
WHERE ...
Обычно есть несколько изображений и адресов для каждой истории и 1 или 2 категории. Таблица NewsStories содержит около 10 000 статей.
Проблема в том, что производительность довольно медленная (порядка 15-20 секунд, хотя h он немного различается и иногда опускается до 5 секунд).
Мне было интересно, есть ли лучший способ организовать запрос, чтобы ускорить его (я новичок в SQL).
В частности, кажется довольно расточительным умножение количества строк для данной истории на количество изображений, умноженное на количество адресов, умноженное на количество категорий.
По сути, я пытаюсь реконструировать свойства новостной статьи в единый объект, которым я могу управлять во внешнем интерфейсе.
Вот объяснение (извиняюсь, если форматирование вышло некорректно). Я предполагаю, что я неправильно индексирую Адреса, если это "Использование где". Это правильно?
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Addresses ALL NULL NULL NULL NULL 6640 Using where
1 SIMPLE NewsStories eq_ref PRIMARY PRIMARY 767 NewsStories.Addresses.story_id 1 Using where
1 SIMPLE Images ref PRIMARY PRIMARY 767 NewsStories.NewsStories.id 1 Using index
1 SIMPLE Categories ref PRIMARY PRIMARY 767 NewsStories.NewStories.id 1