рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдПрдВрдЯреАрдкреИрдЯрд░реНрди: рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдЬреЙрдЗрди рдФрд░ рдУрдЖрд░рдПрд╕

рдмрдлрд╝рд░реНрд╕ рд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рдиреЛрдВ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ...
рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ рдПрдХ рдЫреЛрдЯреА рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдЗрдП PostgreSQL рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦреЗрдВред рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЬрд░реВрд░реА рд╣реИред

рдкреАрдЬреА рдХреЗ рдХреБрдЫ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд╕рдХрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╢реЗрдбреНрдпреВрд▓рд░ рдЕрдзрд┐рдХ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 9.4/9.6 рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рдЧрднрдЧ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИред

рдЖрдЗрдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рд▓реЗрдВ:

SELECT
  TRUE
FROM
  "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" d
INNER JOIN
  "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨а╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╨╡" doc_ex
    USING("@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В")
INNER JOIN
  "╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" t_doc ON
    t_doc."@╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" = d."╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░"
WHERE
  (d."╨Ы╨╕╤Ж╨╛3" = 19091 or d."╨б╨╛╤В╤А╤Г╨┤╨╜╨╕╨║" = 19091) AND
  d."$╨з╨╡╤А╨╜╨╛╨▓╨╕╨║" IS NULL AND
  d."╨г╨┤╨░╨╗╨╡╨╜" IS NOT TRUE AND
  doc_ex."╨б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡"[1] IS TRUE AND
  t_doc."╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" = '╨Я╨╗╨░╨╜╨а╨░╨▒╨╛╤В'
LIMIT 1;

рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВрдлрд╝реАрд▓реНрдб рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ "рд░реВрд╕реА" рдирд╛рдореЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рд╛рдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рдЯреЗрдиреНрд╕рд░ рдкрд░ рдХреЛрдИ рд╡рд┐рджреЗрд╢реА рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ PostgreSQL рд╣рдореЗрдВ рдЪрд┐рддреНрд░рд▓рд┐рдкрд┐ рдореЗрдВ рднреА рдирд╛рдо рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рд╡реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди, рддреЛ рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рдо рджреЗрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЛрдИ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рди рд╣реЛрдВред
рдЖрдЗрдП рдкрд░рд┐рдгрд╛рдореА рдпреЛрдЬрдирд╛ рдкрд░ рдирдЬрд░ рдбрд╛рд▓реЗрдВ:
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдПрдВрдЯреАрдкреИрдЯрд░реНрди: рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдЬреЙрдЗрди рдФрд░ рдУрдЖрд░рдПрд╕
[рджреЗрдЦреЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛.рдЯреЗрдВрд╕рд░.рдЖрд░рдпреВ]

144ms рдФрд░ рд▓рдЧрднрдЧ 53K рдмрдлрд╝рд░реНрд╕ - рдпрд╛рдиреА 400MB рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдбреЗрдЯрд╛! рдФрд░ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реЛрдВрдЧреЗ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рддрдХ рд╡реЗ рд╕рднреА рдХреИрд╢ рдореЗрдВ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝рдиреЗ рдкрд░ рдХрдИ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ!

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдпрд╣ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдЫреЛрдбрд╝ рджреЗрдВ, рдФрд░ рд╕рд╣рдордд рд╣реЛрдВ рдХрд┐ рд╣рдо рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд "рд╕рд╕реНрддреЗ рдореЗрдВ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдиреБрд░реЛрдз рдкреБрдирдГ рд▓рд┐рдЦреЗрдВ рдФрд░/рдпрд╛ рд╣рдорд╛рд░реА рдЬрд╝рд░реВрд░рдд рдХреА рдХреБрдЫ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЖрдзрд╛рд░ рдкрд░ рд░реЛрд▓ рдХрд░реЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд.

рддреЛ рдЕрдиреБрд░реЛрдз:
- рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
- рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА
- рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рдпрд╛ рдХрд▓рд╛рдХрд╛рд░ рд╡рд╣ рдХрд░реНрдордЪрд╛рд░реА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реЛрдВ + рд╕реАрдорд╛ 1

рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдкреВрд░реЗ рд╕реЗрдЯ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдЪрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдХрд╛ рдорддрд▓рдм рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдирд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ 3 рдЯреЗрдмрд▓реЗрдВ рдереАрдВ - рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдХреНрдпрд╛ рд╣реИ...

рдЖрдЗрдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ "рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рдХрд╛рд░" рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ, рдФрд░ рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ (рд╣рдо рдпрд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдЕрднреА рддрдХ рдХреЛрдИ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ):

WITH T AS (
  SELECT
    "@╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░"
  FROM
    "╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░"
  WHERE
    "╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" = '╨Я╨╗╨░╨╜╨а╨░╨▒╨╛╤В'
  LIMIT 1
)
...
WHERE
  d."╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" = (TABLE T)
...

рд╣рд╛рдВ, рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛/рд╕реАрдЯреАрдИ рдореЗрдВ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рд╣реА рдХреНрд╖реЗрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдкреАрдЬреА рдореЗрдВ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рддрд░рд╣ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

d."╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" = (SELECT "@╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" FROM T LIMIT 1)

PostgreSQL рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЖрд▓рд╕реА рдореВрд▓реНрдпрд╛рдВрдХрди

рдмрд┐рдЯрдореИрдкрдСрд░ рдмрдирд╛рдо рдпреВрдирд┐рдпрди

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрд┐рдЯрдореИрдк рд╣реАрдк рд╕реНрдХреИрди рд╣рдореЗрдВ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдкрдбрд╝реЗрдЧрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреЙрд░реНрдб рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ OR рд╕реНрдерд┐рддрд┐ BitmapOr рдореЗрдВ рдмрджрд▓ рдЧрдИ-рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди.
рдЖрдЗрдП рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдвреВрдВрдврдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐рд╕реА рдХреЛ рднреА рд╢рд░реНрддреЛрдВ рд╕реЗ - рдпрд╛рдиреА, рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рд╕рднреА 59K рд░рд┐рдХреЙрд░реНрдб рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рддрднреА рдЬрд╛рдПрдВ рдЬрдм рдкрд╣рд▓реЗ рдореЗрдВ рдХреБрдЫ рди рдорд┐рд▓реЗ. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдЧрд╛:

(
  SELECT
    ...
  LIMIT 1
)
UNION ALL
(
  SELECT
    ...
  LIMIT 1
)
LIMIT 1

"рдмрд╛рд╣рд░реА" LIMIT 1 рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рдорд┐рд▓рдиреЗ рдкрд░ рдЦреЛрдЬ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПред рдФрд░ рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред

"CASE рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдХрдард┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛"

рдореВрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рдПрдХ рдЕрддреНрдпрдВрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд╖рдг рд╣реИ - рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛ "рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди" рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рд╕рдЪреНрдЪрд╛рдИ рдХреЗ рдмрд╛рд╡рдЬреВрдж (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШ. "рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛" рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ), рдпрд╣ рдХрдиреЗрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ "рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд▓рд╛рдЧрдд" рд╣реЛрддреА рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдпрд╣ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЖрдк рдХреНрд╡реЗрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рдЦреЛрдЬ рддрднреА рд╣реЛ рдЬрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ:

SELECT
  ...
FROM
  "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" d
WHERE
  ... /*index cond*/ AND
  CASE
    WHEN "$╨з╨╡╤А╨╜╨╛╨▓╨╕╨║" IS NULL AND "╨г╨┤╨░╨╗╨╡╨╜" IS NOT TRUE THEN (
      SELECT
        "╨б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡"[1] IS TRUE
      FROM
        "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨а╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╨╡"
      WHERE
        "@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" = d."@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В"
    )
  END

рдПрдХ рдмрд╛рд░ рд╣рдорд╕реЗ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдлрд╝реАрд▓реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ JOIN рдХреЛ рд╕рдмрдХреНрд╡реЗрд░реА рдкрд░ рдПрдХ рд╢рд░реНрдд рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред
рдЖрдЗрдП рдЕрдиреБрдХреНрд░рдорд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ "CASE рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмрд╛рд╣рд░" рдЫреЛрдбрд╝ рджреЗрдВ, рд░рд┐рдХреЙрд░реНрдб рд╕реЗ WHEN рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рд░рд▓ рд╢рд░реНрддреЗрдВ рдЬреЛрдбрд╝реЗрдВ - рдФрд░ рдЕрдм "рднрд╛рд░реА" рдХреНрд╡реЗрд░реА рдХреЗрд╡рд▓ THEN рдкрд░ рдЬрд╛рдиреЗ рдкрд░ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред

рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рдирд╛рдо "рдХреБрд▓" рд╣реИ

рд╣рдо рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдХреНрд╡реЗрд░реА рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ:

WITH T AS (
  SELECT
    "@╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░"
  FROM
    "╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░"
  WHERE
    "╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░" = '╨Я╨╗╨░╨╜╨а╨░╨▒╨╛╤В'
)
  (
    SELECT
      TRUE
    FROM
      "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" d
    WHERE
      ("╨Ы╨╕╤Ж╨╛3", "╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░") = (19091, (TABLE T)) AND
      CASE
        WHEN "$╨з╨╡╤А╨╜╨╛╨▓╨╕╨║" IS NULL AND "╨г╨┤╨░╨╗╨╡╨╜" IS NOT TRUE THEN (
          SELECT
            "╨б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡"[1] IS TRUE
          FROM
            "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨а╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╨╡"
          WHERE
            "@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" = d."@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В"
        )
      END
    LIMIT 1
  )
UNION ALL
  (
    SELECT
      TRUE
    FROM
      "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" d
    WHERE
      ("╨в╨╕╨┐╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨░", "╨б╨╛╤В╤А╤Г╨┤╨╜╨╕╨║") = ((TABLE T), 19091) AND
      CASE
        WHEN "$╨з╨╡╤А╨╜╨╛╨▓╨╕╨║" IS NULL AND "╨г╨┤╨░╨╗╨╡╨╜" IS NOT TRUE THEN (
          SELECT
            "╨б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡"[1] IS TRUE
          FROM
            "╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨а╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╨╡"
          WHERE
            "@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В" = d."@╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В"
        )
      END
    LIMIT 1
  )
LIMIT 1;

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ [рд╕реЗ] рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛

рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЖрдВрдЦ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпреВрдирд┐рдпрди рд╕рдмрдмреНрд▓реЙрдХ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдереЛрдбрд╝реА рднрд┐рдиреНрди рд╣реИрдВ - рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реИрдВред рдФрд░ рдпрджрд┐ рд╡реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рдереЗ, рддреЛ рдпрд╣ рдмрдирд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝(рд╡реНрдпрдХреНрддрд┐3, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рдХрд╛рд░) ╨╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝(рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рдХрд╛рд░, рдХрд░реНрдордЪрд╛рд░реА).
ROW рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВрдпреЛрдЬрдирд╛рдХрд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдирд┐рдГрд╕рдВрджреЗрд╣, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдП, рдмреА) = (constA, constB)рдФрд░ (рдмреА, рдП) = (constB, constA). рд▓реЗрдХрд┐рди рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреНрд░рдо рдореЗрдВ, рдРрд╕рд╛ рдЕрдиреБрд░реЛрдз рдмрд╛рдж рдореЗрдВ рдбреАрдмрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдПрдВрдЯреАрдкреИрдЯрд░реНрди: рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдЬреЙрдЗрди рдФрд░ рдУрдЖрд░рдПрд╕
[рджреЗрдЦреЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛.рдЯреЗрдВрд╕рд░.рдЖрд░рдпреВ]

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдмрджрдХрд┐рд╕реНрдордд рдереЗ рдФрд░ рдкрд╣рд▓реЗ рдпреВрдирд┐рдпрди рдмреНрд▓реЙрдХ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░рд╛ рдЕрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА - рдХреЗрд╡рд▓ 0.037ms рдФрд░ 11 рдмрдлрд╝рд░реНрд╕!
рд╣рдордиреЗ рдЕрдиреБрд░реЛрдз рдХреА рдЧрддрд┐ рдмрдврд╝рд╛ рджреА рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдкрдВрдкрд┐рдВрдЧ рдХрдо рдХрд░ рджреА рд╣реИ рдХрдИ рд╣рдЬрд╛рд░ рдмрд╛рд░, рдХрд╛рдлреА рд╕рд░рд▓ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП - рдереЛрдбрд╝реЗ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдоред ЁЯЩВ

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ