[英]How to optimize mysql query for performance
我有五个表join
。 该查询需要5秒钟以上的时间才能执行。 我有以下四个查询,因此我的PHP页面加载时间超过30秒。 我需要提高性能。 请你帮助我好吗? 我已经挣扎了一个星期。 我添加了索引。
我的查询
SELECT f.SortField , f.id
FROM tbl_store_brands AS sb
INNER JOIN tbl_products AS p
ON sb.categoryID = p.pkCategory AND sb.brandID = p.pkBrand
INNER JOIN ModelPrice AS mp ON (p.id = mp.product_id)
INNER JOIN Brand_Data AS bd ON bd.pkID = p.pkBrand+0
INNER JOIN tbl_filters AS f
ON (
p.pkID = f.pkID and
p.pkCategory = f.Category AND
p.cgSlug = 'bathroom-fixtures'
)
WHERE mp.Available = 1
GROUP BY f.SortField
ORDER BY if (
f.SortField = 'CAPACITY' OR
f.SortField = 'WIDTH' OR
f.SortField = 'HEIGHT' OR
f.SortField = 'DEPTH', 4, f.ValueDisplayOrder
) ASC
我的查询说明
可以进行一些修改,以提高查询性能。 1.为ValueDisplayOrder添加索引,这将提高排序性能。 2.避免按功能查询。 删除“ p.pkBrand + 0”,这将增加执行过程的时间。 如果可能,请从order by中删除if子句,然后在您的PHP代码中进行排序。 3.将“ p.cgSlug ='bathroom-fixtures'”代码移动到产品表联接的on子句中,以缩小内部联接结果的范围。
您修改后的查询将如下所示:
SELECT f.SortField , f.id
FROM tbl_store_brands AS sb
INNER JOIN tbl_products AS p
ON sb.categoryID = p.pkCategory AND sb.brandID = p.pkBrand AND p.cgSlug = 'bathroom-fixtures'
INNER JOIN ModelPrice AS mp ON (p.id = mp.product_id)
INNER JOIN Brand_Data AS bd ON bd.pkID = p.pkBrand
INNER JOIN tbl_filters AS f
ON (
p.pkID = f.pkID and
p.pkCategory = f.Category
)
WHERE mp.Available = 1
GROUP BY f.SortField
ORDER BY f.ValueDisplayOrder
ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.