当我添加where子句时,查询执行时间太长

时间:2019-06-03 18:45:59

标签: mysql sql

我有一个4个表的联接查询,当我执行时不带“ where”需要13秒,而where则需要8分钟。

当您使用过滤条件来提高查询性能时,我不知道该怎么办

SELECT distinct  tb_ProdutoComercial.nm_prodcomerc as tx_nome,
         tb_parceiro.id_prodcomerc_pr as id_produto
        FROM  tb_vendedor
       left join  tb_tokenidparc
       on  tb_vendedor.nu_cdVendedorS4E =  tb_tokenidparc.nu_cdVendedor4E_tk 
       left join  tb_parceiro
       on  tb_tokenidparc.nu_cdCorretoraS4E_tk =  tb_parceiro.id_corretora_pr
       left join  tb_ProdutoComercial
       on  tb_ProdutoComercial.id_prodcomerc =  tb_parceiro.id_prodcomerc_pr
      where tb_ProdutoComercial.en_status = '1'

EXPLAIN With Where EXPLAIN Without Where

我正在寻找性能相同但不在哪里的东西

2 个答案:

答案 0 :(得分:1)

在连接左侧的表时,您也要对其进行过滤,这就是需要花费大量时间的原因。 实际上,根据该查询,正在运行5个查询。

答案 1 :(得分:0)

这运行得更好吗?

   SELECT distinct  tb_ProdutoComercial.nm_prodcomerc as tx_nome
        ,tb_parceiro.id_prodcomerc_pr as id_produto
    FROM  tb_vendedor
        left join  tb_tokenidparc on  tb_vendedor.nu_cdVendedorS4E =  tb_tokenidparc.nu_cdVendedor4E_tk 
        left join  tb_parceiro on tb_tokenidparc.nu_cdCorretoraS4E_tk =  tb_parceiro.id_corretora_pr
        left join  (select * from tb_ProdutoComercial where en_status='1')  tb_ProdutoComercial on tb_ProdutoComercial.id_prodcomerc =  tb_parceiro.id_prodcomerc_pr