使用ck数据库,帮我优化下面这个sqlSELECT
pc.aid AS aid,
mpjiv.name AS proName,
mpjiv.companyName AS companyName,
pc.contract_no AS contractNo,
pc.contract_status AS contractStatus,
pc.service_mode AS serviceMode,
pc.contract_url AS contractUrl,
pc.contract_file_name AS contractFileName,
pp.productTypes AS productTypes,
bp.businessTypes AS businessTypes,
pc.contract_amount AS contractAmount,
pc.collection_unit AS collectionUnit,
pcs.user_id AS salesId,
pcs.dept_id AS deptId,
CASE
WHEN pc.service_mode = 2 THEN pc.service_year
ELSE pcq.qa_year
END AS serviceYear,
CASE
WHEN pc.service_mode = 2 THEN pc.service_end_time
ELSE pcq.qa_end_time
END AS endTime,
pc.focus_info AS focusInfo,
pc.documentation_status AS documentationStatus,
csm.modelTypes AS modelTypes,
pc.contract_scale AS contractScale,
pc.customer_check_accept AS customerCheckAccept,
t.constructor_type AS constructorValue,
pcq.amount AS amount,
pc.pro_manager_id AS proManagerId,
pc.solve_user_id AS solveUserId,
pc.create_by AS createBy,
pc.create_time AS createTime
FROM
`ms_pt_contract` pc
LEFT JOIN ms_pt_contract_business pcb ON
pc.contract_no = pcb.contract_no
LEFT JOIN ms_pt_contract_qa pcq ON
pc.contract_no = pcq.contract_no
LEFT JOIN ms_pt_contract_product pcp ON
pc.contract_no = pcp.contract_no
LEFT JOIN ms_pt_contract_sales pcs ON
pc.contract_no = pcs.contract_no
LEFT JOIN ms_pt_contract_sales_model pcsm ON
pcs.aid = pcsm.pt_contract_sales_id
LEFT JOIN ms_pro_jbxx_info_view mpjiv ON
pc.pro_id = mpjiv.aid
LEFT JOIN (
SELECT
pcb.contract_no AS contract_no,
SUM(if(pcb.business_type = 1, pcb.constructor_type, NULL)) AS constructor_type
FROM
ms_pt_contract_business pcb
GROUP BY
pcb.contract_no) t ON
t.contract_no = pc.contract_no
LEFT JOIN (
SELECT
pcb.contract_no AS contract_no,
arrayStringConcat(arraySort(groupArray(DISTINCT pcb.business_type)),
',') AS businessTypes
FROM
ms_pt_contract_business pcb
GROUP BY
pcb.contract_no) bp on
bp.contract_no = pc.contract_no
LEFT JOIN (
SELECT
mpcp.contract_no AS contract_no,
arrayStringConcat(arraySort(groupArray(mpcp.product_type)),
',') AS productTypes
FROM
ms_pt_contract_product mpcp
GROUP BY
mpcp.contract_no) pp on
pp.contract_no = pc.contract_no
LEFT JOIN (
SELECT
mpcs.contract_no AS contract_no,
arrayStringConcat(arraySort(groupArray(DISTINCT mpcsm.model_type)),
',') AS modelTypes
FROM
ms_pt_contract_sales mpcs
left join ms_pt_contract_sales_model mpcsm on
mpcs.aid = mpcsm.pt_contract_sales_id
GROUP BY
mpcs.contract_no) csm on
pc.contract_no = csm.contract_no
WHERE
pc.is_del = 0
AND pcsm.model_type = 1
AND mpjiv.use_type = 1
GROUP BY
pc.aid,
pc.company_id,
pc.pro_id,
pc.contract_no,
pc.contract_status,
pc.service_mode,
pc.contract_amount,
pc.collection_unit,
pcs.user_id,
pcs.dept_id,
pc.focus_info,
pc.documentation_status,
pc.contract_scale,
pc.customer_check_accept,
pcq.amount,
pc.pro_manager_id,
pc.solve_user_id,
pc.create_by,
pc.create_time,
pc.contract_url,
pc.contract_file_name,
serviceYear,
endTime,
proName,
companyName,
t.constructor_type,bp.businessTypes,pp.productTypes,csm.modelTypes
ORDER BY
pc.create_time DESC