优化SQL查询

时间:2018-11-28 14:31:56

标签: php mysql sql

请帮助我优化SQL查询。

"SELECT
c.id,
c.parent_id,
c.name,
c.description,
c.url,
c.meta_title,
c.meta_keywords,
c.meta_description,
c.image,
c.visible,
c.position,
COUNT(u.id) as products_count
FROM __categories c
LEFT JOIN __users_categories uc ON uc.category_id=c.id 
LEFT JOIN __users u ON u.id=uc.user_id AND u.group_id=2 AND u.city_id=".$_SESSION['city_id']."
GROUP BY c.id
ORDER BY c.parent_id, c.position"

在DB表__users_categories中,超过17587行。服务器的回答200有2140 ms的时间。在表__users_categories中没有请求,服务器的200个时间为680ms。如何在SQL查询请求中以最少的服务器答复时间200表__users_categories?

1 个答案:

答案 0 :(得分:0)

您的查询似乎还可以。

请确保您在__users_categories.category_id__users_categories.user_id上都具有索引。

对于mysql,这应该可以解决:

CREATE INDEX user_categories_user_id ON __users_categories (user_id);

CREATE INDEX user_categories_category_id ON __users_categories (category_id);

对于这种特殊查询,您可能希望将一个索引放在多列上

CREATE INDEX name_this_index_accordingly ON __users (city_id, group_id,id);