Query : EXPLAIN EXTENDED SELECT 1 AS `rank`, a.`reference`, fc_remove_sign (a.`reference`) code_ref, COUNT(a.`lead_id`) AS `leads`, COUNT( IF( a.`type` = 'OPPORTUNITY', a.`lead_id`, NULL ) ) AS `opps`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 0, a.`lead_id`, NULL ) ) AS `x`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 1, a.`lead_id`, NULL ) ) AS `x1`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 2, a.`lead_id`, NULL ) ) AS `x2`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 3, a.`lead_id`, NULL ) ) AS `x3`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 4, a.`lead_id`, NULL ) ) AS `x4` FROM (SELECT `fc_get_reference_name` ( IFNULL( fl.`source_type`, vs.`source_type` ), vs.`source_reference` ) AS `reference`, vs.`lead_id`, l.`type`, c.`ID` AS `contract_id`, IF( c.`ID` IS NOT NULL, `fc_get_total_months` (l.`created`, c.`date_created`), NULL ) AS `total_months` FROM `v_trial_service_sources` vs LEFT JOIN `v_field_log_sources` fl ON vs.`lead_id` = fl.`lead_id` INNER JOIN `crm_leads` l ON l.`ID` = vs.`lead_id` LEFT JOIN `crm_contracts` c ON l.`ID` = c.`potential_id` AND c.`total_price_internal` > 0 AND c.`website` = vs.`website` WHERE vs.`lead_id` IS NOT NULL AND ( fl.`source_type` = 2 OR ( fl.`source_type` IS NULL AND vs.`source_type` = 2 ) ) AND l.`service_id` = IF( NAME_CONST('p_service_id', NULL) IS NULL OR NAME_CONST('p_service_id', NULL) = - 1, l.`service_id`, NAME_CONST('p_service_id', NULL) ) AND l.`created` BETWEEN NAME_CONST( '_date_created_from', _latin1 '2016-11-01' COLLATE 'latin1_swedish_ci' ) AND NAME_CONST( '_date_created_to', _latin1 '2016-11-30' COLLATE 'latin1_swedish_ci' ) AND vs.`created` BETWEEN NAME_CONST( '_date_created_from', _latin1 '2016-11-01' COLLATE 'latin1_swedish_ci' ) AND NAME_CONST( '_date_created_to', _latin1 '2016-11-30' COLLATE 'latin1_swedish_ci' )) a GROUP BY a.`reference` HAVING a.`reference` = IFNULL( NAME_CONST('p_source_ref', NULL), a.`reference` ) UNION SELECT 1 AS `rank`, a.`reference`, fc_remove_sign (a.`reference`) code_ref, COUNT(a.`lead_id`) AS `leads`, COUNT( IF( a.`type` = 'OPPORTUNITY', a.`lead_id`, NULL ) ) AS `opps`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 0, a.`lead_id`, NULL ) ) AS `x`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 1, a.`lead_id`, NULL ) ) AS `x1`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 2, a.`lead_id`, NULL ) ) AS `x2`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 3, a.`lead_id`, NULL ) ) AS `x3`, COUNT( IF( a.`contract_id` IS NOT NULL AND a.`total_months` = 4, a.`lead_id`, NULL ) ) AS `x4` FROM (SELECT `fc_get_reference_name` (l.`source_type`, NULL) AS `reference`, l.`ID` AS `lead_id`, l.`type`, c.`ID` AS `contract_id`, IF( c.`ID` IS NOT NULL, `fc_get_total_months` (l.`created`, c.`date_created`), NULL ) AS `total_months` FROM `crm_leads` l LEFT JOIN `crm_contracts` c ON l.`ID` = c.`potential_id` AND c.`total_price_internal` > 0 WHERE l.`source_type` != 2 AND l.`service_id` = IF( NAME_CONST('p_service_id', NULL) IS NULL OR NAME_CONST('p_service_id', NULL) = - 1, l.`service_id`, NAME_CONST('p_service_id', NULL) ) AND l.`created` BETWEEN NAME_CONST( '_date_created_from', _latin1 '2016-11-01' COLLATE 'latin1_swedish_ci' ) AND NAME_CONST( '_date_created_to', _latin1 '2016-11-30' COLLATE 'latin1_swedish_ci' )) a GROUP BY a.`reference` HAVING a.`reference` LIKE IFNULL( NAME_CONST('p_source_ref', NULL), a.`reference` )

EXPLAIN EXTENDED Result

idselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredExtra
1PRIMARYtsALLPRIMARY,lead_id(NULL)(NULL)(NULL)19199350.00Using where; Using temporary; Using filesort
1PRIMARYleq_refPRIMARYPRIMARY4dms.ts.lead_id1100.00Using where
1PRIMARYcrefpotential_idpotential_id9dms.ts.lead_id1100.00Using where
1PRIMARYtsm1reftrial_service_id,meta_key,meta_valuetrial_service_id4dms.ts.id3100.00Using where
1PRIMARYtsm2reftrial_service_id,meta_keytrial_service_id4dms.ts.id3100.00Using where
1PRIMARY<derived6>refkey0key05dms.ts.lead_id10100.00Using where
6DERIVEDflindexTableColumnRowIdx_row_id5(NULL)27841100.00Using where
3UNIONlALL(NULL)(NULL)(NULL)(NULL)1031135100.00Using where; Using temporary; Using filesort
3UNIONcrefpotential_idpotential_id9dms.l.id1100.00Using where
(NULL)UNION RESULT<union1,3>ALL(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)