优化这个sql select FLOW_COMMON.c_task_id as taskId, FLOW_COMMON.c_owner as `owner` from template_flow_common FLOW_COMMON force index (template_flow_common_c_create_time_IDX) right join template_hollycrm1680160914000 hollycrm1680160914000 on FLOW_COMMON.c_business_id = hollycrm1680160914000.c_business_id where FLOW_COMMON.tenant_id = 'T000' and FLOW_COMMON.valid = 1 and lower(FLOW_COMMON.c_state) != 'draft' and lower(FLOW_COMMON.c_state) != 'end' and (((FLOW_COMMON.c_flow_id in ('FLOW20230330152148238756') and FLOW_COMMON.c_processing_group in ('1650685461842100265', '1654482883680665633') or FLOW_COMMON.c_cur_assignee = '1642716546558066731' ) and FLOW_COMMON.c_task_id in ( select id_ taskId from ACT_RU_TASK where ASSIGNEE_ = '1642716546558066731' and ASSIGNEE_ is not null union select c_task_id as taskId from template_flow_common) or FLOW_COMMON.c_processing_group in ('1650685461842100265', '1654482883680665633') )) and FLOW_COMMON.c_workorder_type = 'C0018' and FLOW_COMMON.c_business_type = 'C00180008,C001800080001,C0018000800010001' order by FLOW_COMMON.c_create_time desc, FLOW_COMMON.c_urgency desc limit 572550,10
时间: 2023-10-15 17:08:19 浏览: 211
MT6250 任务创建说明
5星 · 资源好评率100%
为了优化这个查询,你可以考虑以下几点:
1. 索引优化:确保表 template_flow_common 和 template_hollycrm1680160914000 上的索引已经正确创建和使用。您已经在查询中使用了 `force index` 提示,但您可以进一步检查索引的有效性和性能。
2. WHERE 子句顺序:将最频繁使用的条件放在 WHERE 子句的前面,这样可以尽早过滤掉不符合条件的记录,减少后续操作的数据量。
3. EXISTS 子查询替代 IN 子查询:将子查询中的 IN 子查询改写为 EXISTS 子查询,这样可以提高性能。例如,将 `FLOW_COMMON.c_task_id in (select id_ taskId from ACT_RU_TASK where ASSIGNEE_ = '1642716546558066731' and ASSIGNEE_ is not null union select c_task_id as taskId from template_flow_common)` 改写为 `EXISTS (select 1 from ACT_RU_TASK where FLOW_COMMON.c_task_id = id_ and ASSIGNEE_ = '1642716546558066731' and ASSIGNEE_ is not null)`
4. LIMIT 子句优化:LIMIT 子句中的 OFFSET 操作(例如 `limit 572550, 10`)可能会导致性能问题。如果可能的话,尝试避免使用 OFFSET,可以通过其他方式进行分页,例如使用游标。
5. 考虑分批处理:如果查询结果集非常大,可以考虑将查询拆分为多个较小的查询并使用分批处理来逐步获取数据。
请注意,优化查询需要根据具体的数据库和数据量进行调整和测试,以上建议仅供参考。在进行任何更改之前,请确保在测试环境中进行充分的测试,并根据实际情况做出决策。
阅读全文