TL; DR
Из вашего объяснения выглядит, что у вас нет индексного ключа products
на (user, delete, id)
. это, вероятно, самый большой удар для текущего запроса.
Я собираюсь предположить, что, поскольку вы спрашиваете об этом, вы не знаете о EXPLAIN
, и даже если бы вы это сделали, вероятно, было бы трудно разобрать направление, чтобы перейти к тому, что делать, если вы его прочитали.
Короче говоря, если у вас нет серьезных проблем с памятью и памятью, и вы можете добавлять индексы в свои таблицы, я бы посоветовал вам иметь следующие индексы в ваших таблицах:
- Составной индекс для таблицы
products
на (user, delete, id)
- Составной индекс для таблицы
likes
на (post, user)
- Составной индекс для таблицы
comentarios
по (foto, delete)
. Я НЕНАВИЖУ КОЛОННЫ ИМЕНИ ЗАБРОНИРОВАННЫХ СЛОВ (вроде УДАЛИТЬ) !!!!
- Составной индекс для таблицы
following
на (user, block)
Это сделает объединения эффективными, но не на 100% покрывает, что, скорее всего, нежелательно в данном случае из выбранных вами значений.
Возможно, уже существуют существующие индексы, которые соответствуют приведенному выше, любые, которые начинаются с указанных выше значений (в точном порядке) в таблице, для которой он отмечен, будут достаточно хорошими. Например, если у вас есть индекс для таблицы likes
на (post, user, some_other_column)
, он уже предоставит все необходимое для моего предложения индекса на (post, user)
. Ключом является то, что значения, необходимые из него, должны быть точно такими же.
Теперь есть много нюансов для индексирования и вы многому научитесь, но это должно разблокировать вашу работу.
Просто выбросив несколько дополнительных вещей:
- Вы должны называть внешние ключи после таблицы и столбца, к которым они относятся. Например,
comentarios.foto
будет лучше называться comentarios.products_id
, если это действительно идентификатор из таблицы продуктов. Такое четкое именование поможет предотвратить ошибки / ошибки, повысить эффективность написания новых запросов и минимизировать потерю здравого смысла для будущих разработчиков, пытающихся взломать вашу схему.
- Как уже упоминалось несколькими комментаторами, узнайте, как читать Mysql
EXPLAIN
по вашим запросам. Просто буквально добавьте ключевое слово EXPLAIN
перед запросом и запустите его. В результате вы узнаете, что механизм запросов изначально планирует сделать для выполнения вашего запроса (может на самом деле отклоняться во время выполнения, но, как правило, это очень удобно). Отсюда видно, где может потребоваться индекс для улучшения выполнения.