【问题标题】:MySQL Query OptimisationMySQL 查询优化
【发布时间】:2023-03-19 15:42:01
【问题描述】:

在优化下面的查询方面寻求帮助。目前似乎是两个瓶颈,导致它需要大约 90 秒才能完成查询。只有 5000 种产品,所以它并不是一个庞大的数据库/表。瓶颈是 SQL_CALC_FOUND_ROWS 和 ORDER BY 语句——如果我删除这两个语句,运行查询大约需要一秒钟。 我试过删除 SQL_CALC_FOUND_ROWS 并运行 count() 语句,但这也需要很长时间..

按照下面的 Stackoverflow 帖子,最好的办法是使用 INNER JOIN(我不太熟悉)吗? Slow query when using 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

【问题讨论】:

  • 您需要将所有这些连接都设为左连接吗?你了解内连接和左连接的区别吗?
  • 你能告诉我们一些 CREATE TABLE 语句吗?你有什么索引?
  • 产品不一定需要类别、品牌、作者、叙述者或任何链接文件。据我了解,在这种情况下我需要使用 LEFT JOIN 对吗?因为如果我使用 INNER JOINS 它不会匹配某些项目上的任何内容?
  • 是的,没错。我只是想确定你知道其中的区别。试试我在下面添加的查询以获得性能。

标签: mysql sql database optimization


【解决方案1】:

您可以尝试通过使用派生表在连接前检索过滤和排序的产品来减小连接的大小。这假设 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
    )

这是“暗中刺伤”,因为您的问题没有足够的细节。

【讨论】:

  • 感谢 - 不得不稍微调整一下,但这有助于我了解如何正确优化它。
猜你喜欢
  • 2011-01-22
  • 2011-07-07
  • 2018-12-21
  • 2010-12-15
  • 2011-11-04
  • 2016-01-25
相关资源
最近更新 更多