首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询所需时间超过4分钟。

SQL查询所需时间超过4分钟。
EN

Stack Overflow用户
提问于 2018-05-11 16:08:51
回答 3查看 184关注 0票数 0
代码语言:javascript
复制
SELECT
    pvl.name_parametre_value_parametre_value_lang,
    pv.id_parametre_value,
    ic.id_combinaison,
    ic.prix_combinaison,
    ic.poid_combinaison,
    ic.actif_combinaison,
    ic.actif_genere,
    pv.actif_value,
    pipv.id_parametre_value as pipv_id_parametre_value
FROM
    ps_imp_combinaison_parametre_value_6 cpv
    LEFT JOIN ps_imp_combinaison_6 ic ON ic.id_combinaison = cpv.id_combinaison
    LEFT JOIN ps_imp_parametre_value pv ON pv.id_parametre_value = cpv.id_parametre_value
    LEFT JOIN ps_imp_parametre_value_lang pvl ON pvl.id_parametre_value = pv.id_parametre_value
    LEFT JOIN ps_imp_parametre p ON p.id_parametre = pv.id_parametre
    LEFT JOIN ps_imp_product_impression_parametre_value pipv ON pipv.id_parametre_value = pv.id_parametre_value and pipv.id_product_impression = 63
WHERE
    p.id_nom_domaine = 6
    AND
    pvl.id_lang_domaine = 18
    AND
    ic.id_product_impression = 63
GROUP BY
    ic.id_combinaison,
    cpv.id_parametre_value
ORDER BY
    ic.id_combinaison,
    p.id_parametre 
LIMIT
    0, 50

下面的查询花费了太多时间(超过4分钟)。有办法让它更快吗?

ps_imp_combinaison有97290条,ps_imp_combinaison_parametre_value有705595条

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-19 13:34:21

代码语言:javascript
复制
SELECT
    pvl.name_parametre_value_parametre_value_lang,
    pv.id_parametre_value,

    pipv.id_parametre_value as pipv_id_parametre_value
FROM
    ps_imp_combinaison_parametre_value_6 cpv
    LEFT JOIN ps_imp_combinaison_6 ic ON ic.id_combinaison = cpv.id_combinaison
    LEFT JOIN ps_imp_parametre_value pv ON pv.id_parametre_value = cpv.id_parametre_value
    LEFT JOIN ps_imp_parametre_value_lang pvl ON pvl.id_parametre_value = pv.id_parametre_value
    LEFT JOIN ps_imp_parametre p ON p.id_parametre = pv.id_parametre
    LEFT JOIN ps_imp_product_impression_parametre_value pipv ON pipv.id_parametre_value = pv.id_parametre_value and pipv.id_product_impression = 63
WHERE
    p.id_nom_domaine = 6
    AND
    pvl.id_lang_domaine = 18
    AND
    ic.id_product_impression = 63
GROUP BY
    ic.id_combinaison,
    cpv.id_parametre_value
ORDER BY
    ic.id_combinaison,
    p.id_parametre 
LIMIT
    0, 50
票数 0
EN

Stack Overflow用户

发布于 2018-05-11 16:17:00

您的查询包含大量联接,这将增加提取信息所需的时间。没有一种简单的方法来加速你拥有的东西,因为你已经对所有的结果应用了一个限制,而且这个限制看起来并不容易被更早的应用。

减少时间的最大潜力是通过查看所拖动的内容背后的逻辑,看看是否可以减少连接的数量。此外,查看是否可以在加入以下子查询之前应用限制:

代码语言:javascript
复制
SELECT * FROM
    (SELECT * FROM table_1 LIMIT 50) as subq
    LEFT JOIN ... 

这可能有助于降低后期联接的复杂性。

票数 1
EN

Stack Overflow用户

发布于 2018-05-11 16:22:27

您有定义任何索引吗?您肯定希望在ps_imp_combinaison表列id_combinaisonps_imp_combinaison_parametre_value表列id_combinaison上建立索引,因为这是可能最大的表的主要连接条件。

那么,标准列的其他索引可能会有所帮助。请记住,索引是有权衡的;索引越多,插入/更新/删除所用的时间就越长,但它们可能会使4分钟的查询变成一个4秒的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50296277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档