簡體   English   中英

MySQL查詢優化

[英]MySQL Query Optimisation

在優化以下查詢中尋求幫助。 此刻似乎有兩個瓶頸,導致大約90秒鍾才能完成查詢。 只有5000種產品,因此它並不是一個龐大的數據庫/表。 瓶頸是SQL_CALC_FOUND_ROWS和ORDER BY語句-如果同時刪除這兩個瓶頸,則大約需要一秒鍾才能運行查詢。 我曾嘗試刪除SQL_CALC_FOUND_ROWS並運行count()語句,但這也需要很長時間。

最好的方法是按照以下Stackoverflow帖子使用INNER JOIN(我不太熟悉)嗎? 使用ORDER BY時查詢速度慢

SELECT SQL_CALC_FOUND_ROWS * 
FROM tbl_products
LEFT JOIN tbl_link_products_categories ON lpc_p_id = p_id
LEFT JOIN tbl_link_products_brands ON lpb_p_id = p_id
LEFT JOIN tbl_link_products_authors ON lpa_p_id = p_id
LEFT JOIN tbl_link_products_narrators ON lpn_p_id = p_id
LEFT JOIN tbl_linkfiles ON lf_id = p_id
AND (
lf_table = 'tbl_products'
OR lf_table IS NULL
)
LEFT JOIN tbl_files ON lf_file_id = file_id
AND (
file_nameid = 'p_main_image_'
OR file_nameid IS NULL
)
WHERE p_live = 'y'
ORDER BY p_title_clean ASC, p_title ASC
LIMIT 0 , 10

您可以嘗試通過使用派生表在加入之前檢索經過篩選和訂購的產品來減小聯接的大小。 假設p_live,p_title_clean和p_title是您的tbl_products表中的字段-

SELECT * 
FROM (SELECT * 
    FROM tbl_products
    WHERE p_live = 'y'
    ORDER BY p_title_clean ASC, p_title ASC
    LIMIT 0 , 10
) AS tbl_products
LEFT JOIN tbl_link_products_categories
    ON lpc_p_id = p_id
LEFT JOIN tbl_link_products_brands
    ON lpb_p_id = p_id
LEFT JOIN tbl_link_products_authors
    ON lpa_p_id = p_id
LEFT JOIN tbl_link_products_narrators
    ON lpn_p_id = p_id
LEFT JOIN tbl_linkfiles
    ON lf_id = p_id
    AND (
        lf_table = 'tbl_products'
        OR lf_table IS NULL
    )
LEFT JOIN tbl_files
    ON lf_file_id = file_id
    AND (
        file_nameid = 'p_main_image_'
        OR file_nameid IS NULL
    )

這是一個“黑暗中的刺”,因為您的問題中沒有足夠的細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM