mardi 2 décembre 2014

Optimize join query involves 5 tables



EXPLAIN SELECT
a.year,
a.month,
e.large_classify_eng,
e.middle_classify_eng,
g.bu_detail_order,
g.bu_detail_enterprise_name_eng,
a.service_id,
SUM(a.money_amount) AS money_amount,
'04_Actual' AS b_f_a
FROM
t2_actual_summary_sheet_db a,
t2_effective_bu_detail_mapping d,
t2_bu_detail_master e,
t2_effective_enterprise_mapping f,
t2_enterprise_master g
WHERE a.year = d.year
AND a.month = d.month
AND a.bu_detail_large_classify = d.bu_detail_large_classify
AND a.bu_detail_middle_classify = d.bu_detail_middle_classify
AND d.bu_detail_axis_3 = e.bu_detail_code
AND a.year = f.year
AND a.month = f.month
AND a.profit_center = f.profit_center
AND f.bu_detail_enterprise_code = g.bu_detail_enterprise_code
AND component_flag IS NULL
AND (
a.year > 2014
OR (a.year = 2014
AND a.month >= 9)
)
AND (
a.year < 2014
OR (a.year = 2014
AND a.month <= 10)
)
GROUP BY a.year,
a.month,
e.large_classify,
e.middle_classify,
g.bu_detail_order,
g.bu_detail_enterprise_name_eng,
a.service_id
ORDER BY a.year,
a.month;


Below are table structure:



CREATE TABLE `t2_actual_summary_sheet_db` (
`year` smallint(4) DEFAULT NULL,
`month` tinyint(2) DEFAULT NULL,
`account_order` int(11) DEFAULT NULL,
`profit_center_order` int(11) DEFAULT NULL,
`service_division` varchar(50) DEFAULT NULL,
`expense_division` varchar(50) DEFAULT NULL,
`charge_department` varchar(100) DEFAULT NULL,
`logic` varchar(100) DEFAULT NULL,
`status` varchar(50) DEFAULT NULL,
`service_id` varchar(50) DEFAULT NULL,
`service_name` varchar(100) DEFAULT NULL,
`bu_detail_item` varchar(50) DEFAULT NULL,
`account_1` varchar(100) DEFAULT NULL,
`account_2` varchar(100) DEFAULT NULL,
`account_3` varchar(50) DEFAULT NULL,
`bu_detail_enclosed` varchar(100) DEFAULT NULL,
`enterprise_1` varchar(100) DEFAULT NULL,
`enterprise_2` varchar(100) DEFAULT NULL,
`profit_center` varchar(50) DEFAULT NULL,
`profit_center_name` varchar(50) DEFAULT NULL,
`money_amount` double DEFAULT NULL,
`bu_detail_large_classify` varchar(50) DEFAULT NULL,
`bu_detail_middle_classify` varchar(50) DEFAULT NULL,
`enterprise_rating` varchar(50) DEFAULT NULL,
`component_flag` varchar(50) DEFAULT NULL,
`facility_flag` varchar(50) DEFAULT NULL,
`international_flag` varchar(50) DEFAULT NULL,
`graduates_flag` varchar(50) DEFAULT NULL,
`spare_flag_1` varchar(50) DEFAULT NULL,
`spare_flag_2` varchar(50) DEFAULT NULL,
`spare_flag_3` varchar(50) DEFAULT NULL,
KEY `idx1_effective_summary_sheet_db` (`year`,`month`),
KEY `idx2_effective_summary_sheet_db` (`month`,`money_amount`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4





CREATE TABLE `t2_bu_detail_master` (
`bu_detail_code` varchar(50) NOT NULL DEFAULT '',
`large_classify` varchar(50) DEFAULT NULL,
`middle_classify` varchar(50) DEFAULT NULL,
`large_classify_eng` varchar(100) DEFAULT NULL,
`middle_classify_eng` varchar(100) DEFAULT NULL,
`axis_1` varchar(50) DEFAULT NULL,
`axis_2` varchar(50) DEFAULT NULL,
`axis_3` varchar(50) DEFAULT NULL,
`axis_4` varchar(50) DEFAULT NULL,
`axis_5` varchar(50) DEFAULT NULL,
KEY `idx1_bu_detail_master` (`bu_detail_code`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8





CREATE TABLE `t2_effective_bu_detail_mapping` (
`year` smallint(4) NOT NULL,
`month` tinyint(2) NOT NULL,
`bu_detail_large_classify` varchar(50) NOT NULL DEFAULT '',
`bu_detail_middle_classify` varchar(50) NOT NULL DEFAULT '',
`bu_detail_axis_1` varchar(50) DEFAULT NULL,
`bu_detail_axis_2` varchar(50) DEFAULT NULL,
`bu_detail_axis_3` varchar(50) DEFAULT NULL,
`bu_detail_axis_4` varchar(50) DEFAULT NULL,
`bu_detail_axis_5` varchar(50) DEFAULT NULL,
KEY `idx1_effective_bu_detail_mapping` (`year`,`month`,`bu_detail_large_classify`,`bu_detail_middle_classify`),
KEY `idx2_effective_bu_detail_mapping` (`year`,`month`,`bu_detail_large_classify`,`bu_detail_middle_classify`,`bu_detail_axis_1`),
KEY `idx3_effective_bu_detail_mapping` (`year`,`month`,`bu_detail_large_classify`,`bu_detail_middle_classify`,`bu_detail_axis_2`),
KEY `idx4_effective_bu_detail_mapping` (`year`,`month`,`bu_detail_large_classify`,`bu_detail_middle_classify`,`bu_detail_axis_3`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8





CREATE TABLE `t2_effective_enterprise_mapping` (
`year` smallint(4) NOT NULL,
`month` tinyint(2) NOT NULL,
`profit_center` varchar(50) NOT NULL DEFAULT '',
`bu_detail_enterprise_code` varchar(50) DEFAULT NULL,
`subsidiary_cost_existence` varchar(50) DEFAULT NULL,
`enterprise_rating` varchar(50) DEFAULT NULL,
KEY `idx1_effective_enterprise_mapping` (`year`,`month`,`profit_center`),
KEY `idx2_effective_enterprise_mapping` (`year`,`month`,`profit_center`,`bu_detail_enterprise_code`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8





CREATE TABLE `t2_enterprise_master` (
`bu_detail_enterprise_code` varchar(50) NOT NULL DEFAULT '',
`bu_detail_enterprise_name` varchar(100) DEFAULT NULL,
`bu_detail_enterprise_name_eng` varchar(100) DEFAULT NULL,
`bu_detail_enterprise_name_eng_abb` varchar(50) DEFAULT NULL,
`bu_detail_order` int(11) DEFAULT NULL,
`manage_code` varchar(50) DEFAULT NULL,
`manage_enterprise_name` varchar(100) DEFAULT NULL,
`manage_enterprise_name_eng` varchar(100) DEFAULT NULL,
`manage_enterprise_name_eng_abb` varchar(50) DEFAULT NULL,
`manage_order` int(11) DEFAULT NULL,
`bpc_code` varchar(50) DEFAULT NULL,
`latest_rating` varchar(50) DEFAULT NULL,
`latest_subsidiary_cost_existence` varchar(50) DEFAULT NULL,
`region_code` varchar(50) DEFAULT NULL,
`enterprise_start_year_month` date DEFAULT NULL,
`enterprise_end_year_month` date DEFAULT NULL,
KEY `idx1_enterprise_master` (`bu_detail_enterprise_code`),
KEY `idx2_enterprise_master` (`bu_detail_enterprise_code`,`bu_detail_enterprise_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8




Aucun commentaire:

Enregistrer un commentaire