繁体   English   中英

如何优化mysql查询的性能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM