Во-первых,
AND d.delete_sw IS NULL
должно быть в соединении, а не в предложении WHERE.Я не думаю, что это важно для производительности, но не верь мне в этом.Но я знаю, что это просто хорошая политика - иметь только заключительное предложение WHERE, построенное из самой первичной таблицы.
Во-вторых, поскольку мы не знаем сами данные или структуру данных, я бы сказал,при КАЖДОМ соединении убедитесь, что вы по возможности используете индекс таблицы, чтобы предотвратить полное сканирование таблицы.Это может показаться оскорбительным, но я неоднократно совершал ошибку, не осознавая, что на самом деле было место, где я НЕ использовал индексированное поле для ограничения сканируемых данных.
Например, все ли поля, перечисленные ниже, являются частью первичного ключа соответствующих таблиц?Если да, то они ПОЛНЫЙ первичный ключ?Если они не являются полным первичным ключом, есть ли способ получить остальные значения первичного ключа из таблиц, из которых вы «исходите»?SQL постарается сделать все возможное, чтобы составить наиболее эффективный план, но он может зайти так далеко, что мы всегда должны стараться убедиться, что мы используем индексированные поля и, предпочтительно, первичные ключи, чтобы база данных недолжны работать усерднее, чем должны.
Обсуждаемые поля:
dm_task_tag.task_seq_num
dm_doc_group.group_seq_num
dm_doc.doc_seq_num
dm_doc_master.dm.doc_ref_id
mo_employees.emp_id
dc_case_individual.indv_id
dc_case_individual.case_num
Я ОЧЕНЬ с подозрением отношусь ко второму левому соединению, но я не могу сказать об этом много, не зная таблиц.Мне также особенно любопытно, является ли doc_ref_id на самом деле первичным ключом dm_doc_master, или если у вас есть seq_num, которого вам не хватает ...