如何提高此查询的性能?

时间:2015-03-05 20:55:36

标签: mysql sql sql-optimization

在这个查询中,我做了一个"左连接"使用具有许多寄存器的表(ASPECT_CONTACT_EVENTS)(在此期间,250.000)。

表Promessas在此期间有200个注册表。



SET @inicio = '2015-02-24 00:00:00';

SET @fim = '2015-02-24 23:59:00';

SELECT Promessas.Data_acordo, if(Ativos.account_number IS NULL,
IF(Promessas.tipo_acordo='A VISTA',"11-QTDE DE PROMESSAS A VISTA (RECEPTIVO)","12-QTDE DE PROMESSAS PARCELADO (RECEPTIVO)"),
IF(Promessas.tipo_acordo='A VISTA',"05-QTDE DE PROMESSAS A VISTA (ATIVO)","06-QTDE DE PROMESSAS PARCELADO (ATIVO)"))  AS TIPO,

COUNT(DISTINCT Promessas.id_contr), Promessas.cluster FROM DWH_RBZ.tb_itau_banco_promessa_dia as Promessas
left join DWH_RBZ.ASPECT_CONTACT_EVENTS AS Ativos on ((Ativos.account_number = Promessas.id_contr) and (time_of_contact between (@inicio) and (@fim)) )
Where Promessas.data_acordo between (@inicio) and (@fim)
Group By tipo, Promessas.cluster;




如何改善这种表现?

1 个答案:

答案 0 :(得分:1)

优化器与@variables不相符。请将值直接放入查询中,看看是否加快了查询速度。

否则,Promessas需要一个以data_acordo开头的索引,希望WHERE子句可以使用索引。第二个表Ativos需要一个复合INDEX(account_number, time_of_contact),假设times_of_contact在该表中。请在所有字段中使用别名!