为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8 .4
【操作系统】:统信
【CPU】:
【问题描述】*:子查询数据只有3万行,加上外面的 ORDER BY
temp.approve_time DESC,
temp.createTime DESC 后查询很慢(需要近2S);子查询很快;在mysql中整个查询很快,在0.4S
select * from (
SELECT
t.id,
t.NAME,
t.type_name AS type_name,
t.seal_name AS seal_name,
t.contract_price,
t.apply_date,
t.is_intelligent,
t.apply_status,
t.customers_name AS customer_name,
t.record_status,
t.upload_status,
t.is_take_picture,
t.is_result_upload,
'' AS custodian_name,
t.create_id,
p.NAME AS create_name,
e.fullPathName AS department_name,
CASE
WHEN t.apply_status = 0 THEN
5
WHEN t.apply_status = 1 THEN
2
WHEN t.apply_status = 2 THEN
4
WHEN t.apply_status = 3 THEN
3
WHEN t.apply_status = 6 THEN
1 ELSE 0
END AS flag,
t.apply_no,
t.file_count,
t.createTime as createTime,
t.apply_reason,
t.approve_time as approve_time,
CASE
WHEN t.limit_time = 1
AND now() > t.limitDoneTime THEN
0 ELSE ''
END AS is_time_out,
ifnull(( SELECT sum( use_count ) FROM yx_seal_apply_seal WHERE seal_apply_id = t.id ), 0 ) AS use_count,
ifnull(( SELECT sum( seal_count ) FROM yx_seal_apply_seal WHERE seal_apply_id = t.id ), 0 ) AS seal_count,
t.is_take_picture AS tt,
t.is_limit_count AS cc,
t.seal_id AS sealId,
t.out_status,
t.is_out,
t.is_end_use,
l.termination_status,
l.amount_type,
l.customers_names,
l.seal_type,
l.is_sign_location,
l.is_edit,
l.contract_id,
l.is_must_upload,
t.file_no,
t.upload_remark,
l.sign_status,
l.contract_no,
l.turn_apply_id,
t.not_approve_flow
FROM
yx_seal_apply t
LEFT JOIN yx_seal_apply_sub l ON l.seal_apply_id = t.id
LEFT JOIN yx_person p ON t.create_id = p.id
LEFT JOIN yx_person_department e ON t.department_id = e.id
WHERE
t.deleted =FALSE
AND t.unit_id ='2c90ba8479e9d3ab017aaec403e5313e'
AND l.unit_id ='2c90ba8479e9d3ab017aaec403e5313e'
AND p.unit_id ='2c90ba8479e9d3ab017aaec403e5313e'
AND (
t.create_id = '8a84b4ab7b3988a9017b39d6bda94d31'
OR t.department_id <> '-1'
OR t.id IN (
SELECT
biz_id
FROM
yx_workflow_copy cy
WHERE
cy.unit_id ='2c90ba8479e9d3ab017aaec403e5313e'
AND cy.deleted = 0
AND cy.receivePerson_id ='8a84b4ab7b3988a9017b39d6bda94d31'
AND cy.is_query = 1
)
OR t.id IN ( SELECT apply_id FROM yx_seal_apply_turn yt WHERE yt.unit_id = '2c90ba8479e9d3ab017aaec403e5313e' AND yt.deal_person_id ='8a84b4ab7b3988a9017b39d6bda94d31' )
)
) temp
ORDER BY
temp.approve_time DESC,
temp.createTime DESC
1,order by 的这2个列approve_time DESC,createTime DESC,添加上上1个组合索引降序
2,更新统计信息
3,清空下执行计划缓存后,执行测试下sql看看还慢不慢了
1、加上order by 和不添加order by执行计划发一下;